Regex 解释string.split的工作原理

Regex 解释string.split的工作原理,regex,split,Regex,Split,如果这是一个愚蠢的问题,我很抱歉,但为什么会返回5: "2222".split(/\d/).length “2222”。拆分(/\d/)将返回一个由5个空字符串组成的数组,这是为什么 我知道\d代表一位数字。我也理解如果此返回数组由4个“a”字符串组成: "a a a a".split(" ") 但是我不能理解上面的第一个例子。请给我一个解释 让我们想象一下,您的字符串是: " 2 2 2 2 " 然后按数字分割(即2)-最终得到一个由5个字符串组成的数组,该数组由一个空格组成。删除所有空

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

"2222".split(/\d/).length
“2222”。拆分(/\d/)
将返回一个由5个空字符串组成的数组,这是为什么

我知道
\d
代表一位数字。我也理解如果此返回数组由4个“a”字符串组成:

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

但是我不能理解上面的第一个例子。请给我一个解释

让我们想象一下,您的字符串是:

" 2 2 2 2 "

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

让我们想象一下,您的字符串是:

" 2 2 2 2 "

然后按数字分割(即
2
)-最终得到一个由5个字符串组成的数组,该数组由一个空格组成。删除所有空格并继续按数字分割-每个
2
前后的相同位置/边界有5个字符串,但它们现在是空的。

split将找到要分割的字符串/正则表达式的第一个实例,并在该实例处剪切字符串,移除它,留下第一次切割之前的任何东西。它将继续对整个输入字符串执行此操作

例如:

"abcbbd".split(/b/)
// Results in ["a", "c", "", "d"]
我们首先在字符串中查找与
/b/
匹配的子字符串。我们在索引1,长度1处找到一个:abcbbd。我们的起始索引是0,因此我们从主字符串中获取子字符串(0,1),这是第一个元素:
[“a”]

现在开始索引是2(我们匹配的字符串的结尾,是
/b/
),我们再次开始,在索引3处找到
/b/
,长度1:abcbbd。我们再次切掉字符串,现在结果是
[“a”,“c”]

现在开始索引是4。我们立即再次发现
/b/
,索引4,长度1:abcbbd。我们将字符串从起始索引4剪切到当前索引4,生成一个空字符串。我们的结果现在是
[“a”,“c”,““”]

继续到字符串的末尾,我们得到
[“a”、“c”、“d”]


警告:是的,这并不是split的工作原理,但为了理解其输出,这已经足够了。

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

例如:

"abcbbd".split(/b/)
// Results in ["a", "c", "", "d"]
我们首先在字符串中查找与
/b/
匹配的子字符串。我们在索引1,长度1处找到一个:abcbbd。我们的起始索引是0,因此我们从主字符串中获取子字符串(0,1),这是第一个元素:
[“a”]

现在开始索引是2(我们匹配的字符串的结尾,是
/b/
),我们再次开始,在索引3处找到
/b/
,长度1:abcbbd。我们再次切掉字符串,现在结果是
[“a”,“c”]

现在开始索引是4。我们立即再次发现
/b/
,索引4,长度1:abcbbd。我们将字符串从起始索引4剪切到当前索引4,生成一个空字符串。我们的结果现在是
[“a”,“c”,““”]

继续到字符串的末尾,我们得到
[“a”、“c”、“d”]


警告:是的,这并不完全是split的工作方式,但为了理解其输出,这就足够了。

什么语言?它们各不相同。看起来像Ruby?试试
“2222”。split(/(\d)/)
@dawg它也是有效的JS什么语言?它们各不相同。看起来像Ruby?试试
“2222”。split(/(\d)/)
@dawg它也是有效的