我很抱歉,如果这是一个愚蠢的问题,但为什么这会回归5:
"2222".split(/\d/).length
"2222".split(/\d/)
将返回一个由5个空字符串组成的数组,为什么会这样?
我理解\d
代表一位数。我也明白,如果这个回归是由4" a" string:
"a a a a".split(" ")
但我无法理解上面的第一个例子。请给我一个解释。
答案 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"]
。
警告:是的,这并不完全是分裂如何运作,但为了理解其输出,这就足够了。