Get to know MDN better
此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
split() 方法接受一个模式,通过搜索模式将字符串分割成一个有序的子串列表,将这些子串放入一个数组,并返回该数组。
描述每个分割应该发生在哪里的模式。可以是 undefined,一个字符串,或者一个具有 Symbol.split 方法的对象——典型的例子是正则表达式。省略 separator 或传递 undefined 会导致 split() 返回一个只包含所调用字符串数组。所有不是 undefined 的值或不具有 [Symbol.split]() 方法的对象都被强制转换为字符串。
limit 可选一个非负整数,指定数组中包含的子字符串的数量限制。当提供此参数时,split 方法会在指定 separator 每次出现时分割该字符串,但在已经有 limit 个元素时停止分割。任何剩余的文本都不会包含在数组中。
在给定字符串中出现 separator 的每一个点上进行分割而成的字符串数组。
如果 separator 是一个非空字符串,目标字符串会被所有匹配的 separator 分割,结果中不包括 separator。例如,一个包含制表符分隔值(TSV)的字符串可以通过传递一个制表符作为分隔符来解析,如 myString.split("\t")。如果 separator 包含多个字符,必须找到整个字符序列才能分割。如果 separator 出现在字符串的开头(或结尾),它仍然具有分割的效果,会导致一个空(即零长度)的字符串出现在返回数组的第一个(或最后一个)位置。如果 separator 没有出现在 str 中,返回的数组包含一个元素,其中是整个字符串。
如果 separator 是一个空字符串(""),str 被转换为一个由其 UTF-16 字符组成的数组,形成的字符串的两端没有空字符。
备注:"".split("") 是唯一一种字符串作为 separator 参数传入的生成空数组的方法。
警告:当空字符串("")被用作分隔符时,字符串不是由用户感知的字符(grapheme cluster)或 unicode 字符(码位)分割,而是由 UTF-16 代码单位分割。这破坏了代理对。请参阅 StackOverflow 上的“How do you get a string to a character array in JavaScript?”。
如果 separator 是一个匹配空字符串的正则表达式,匹配是由 UTF-16 码元(code unit)还是 Unicode 码位(code point)分割,取决于是否设置了 u 标志。
如果 separator 是包含捕获括号的正则表达式,则每次 separator 匹配时,捕获括号的结果(包括任何 undefined 的结果)将被拼接到输出数组中。此行为是由正则表达式对象的 Symbol.split 方法指定的。
如果 separator 是一个具有 Symbol.split 方法的对象,该方法被调用,目标字符串和 limit 作为参数, this 设置为该对象。它的返回值成为 split 的返回值。
任何其他值在作为分隔符(separator)使用之前都将被强制转换为字符串。
当字符串为空并且指定了一个非空的分隔符,split() 返回 [""]。如果字符串和分隔符都是空字符串,将返回一个空数组。
下面的示例定义了一个函数,使用 separator 将一个字符串分割成一个字符串数组。在分割字符串后,该函数记录信息,指出原始字符串(分割前)、使用的分隔符、数组中的元素数,以及各个数组元素。
上述示例会产生如下输出:
原始字符串为:"Oh brave new world that has such people in it." 分隔符为:" " 分隔后的数组有 10 个元素:Oh / brave / new / world / that / has / such / people / in / it. / 原始字符串为:"Oh brave new world that has such people in it." 分隔符为:"undefined" 分隔后的数组有 1 个元素:Oh brave new world that has such people in it. / 原始字符串为:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec" 分隔符为:"," 分隔后的数组有 12 个元素:Jan / Feb / Mar / Apr / May / Jun / Jul / Aug / Sep / Oct / Nov / Dec /下例中,split() 方法会查找“0 或多个空白字符接着分号,再接着 0 或多个空白字符”模式的字符串,找到后,就将空白符和分号从字符串中移除,nameList 是 split 的返回数组。
上例输出两行,第一行输出原始字符串,第二行输出结果数组。
Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand [ "Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand", "" ]下例中,split 查找字符串中的 0 或多个空格,并返回找到的前 3 个分割元素。
上例输出:
["Hello", "World.", "How"]如果 separator 包含捕获括号 ( ),则其匹配结果将会包含在返回的数组中。
备注:\d 匹配从 0 到 9 的数字字符类。
一个包含 Symbol.split 方法的对象可以用作分割器,可以自定义分割行为。
下面的示例使用一个由递增的数字组成的内部状态来分割一个字符串:
下面的示例使用一个内部状态来强制执行某些行为,并确保产生一个“有效”的结果。
| ECMAScript® 2027 Language Specification # sec-string.prototype.split |
启用 JavaScript 以查看此浏览器兼容性表。