有关string.split如何工作的说明

时间:2016-02-29 16:11:29

标签: regex split

我很抱歉,如果这是一个愚蠢的问题,但为什么这会回归5:

"2222".split(/\d/).length

"2222".split(/\d/)将返回一个由5个空字符串组成的数组,为什么会这样?

我理解\d代表一位数。我也明白,如果这个回归是由4" a" string:

"a a a a".split(" ")

但我无法理解上面的第一个例子。请给我一个解释。

2 个答案:

答案 0 :(得分:3)

让我们想象你的字符串是:

" 2 2 2 2 "

你用数字分割(即2) - 你最终得到一个由一个空格组成的5个字符串的数组。删除所有这些空格并继续按数字分割 - 根据原始字符串,您在每个2之前和之后有相同位置/边界的5个字符串,但它们现在是空的。

答案 1 :(得分:1)

Split将找到你要拆分的字符串/正则表达式的第一个实例,并在该实例中剪切字符串,将其删除并留下剪切前的内容作为第一个结果。它将继续为整个输入字符串执行此操作。

一个例子:

"abcbbd".split(/b/)
// Results in ["a", "c", "", "d"]

我们首先查找匹配字符串中/b/的子字符串。我们在索引1找到一个,长度为1: b cbbd。我们的起始索引是0,所以我们从主字符串中取出子串(0,1),这是第一个元素:["a"]

现在起始索引是2(我们匹配的字符串的结尾,/b/),然后我们重新开始,在索引3找到/b/,长度为1:abc b < /强> BD。我们再次切断字符串,现在结果为["a", "c"]

现在起始索引是4.我们立即再次找到/b/,索引4,长度1:abcb b d。我们将字符串从起始索引4切换到当前索引4,产生一个空字符串。我们的结果现在是["a", "c", ""]

继续到字符串的结尾,我们得到["a", "c", "", "d"]

警告:是的,这并不完全是分裂如何运作,但为了理解其输出,这就足够了。