为什么'abc'.split(/(a | b | c)/)在Javascript中给出a,b,c和AND空字符串?

2 javascript regex split

我正在尝试编写一个将单词拆分成字母的函数,我得到了一个奇怪的结果:

'abc'.split(/(a|b|c)/) 
Run Code Online (Sandbox Code Playgroud)

得到:

["", "a", "", "b", "", "c", ""]
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我在Python中看到了相同的结果,所以显然问题就在于我!

>>> re.split( '(a|b|c)', 'abc')
['', 'a', '', 'b', '', 'c', '']
Run Code Online (Sandbox Code Playgroud)

问题是,为什么字母之间插入了空字符串?我期望

["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

谢谢!

小智 7

您可以使用全局正则表达式进行字符串匹配,而不是拆分...

'abc'.match(/(a|b|c)/g); // ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

这更有意义,因为你真正关心的只是匹配,而不是匹配之间的匹配.

如果你想匹配a到z中的任何字符,你可以这样做......

'abc'.match(/([a-z])/gi);
Run Code Online (Sandbox Code Playgroud)

我也使它不区分大小写匹配大写.


Bor*_*lid 5

有您的分隔符之间空字符串,因为你是分裂那些信.a,b并且c是"分隔符"标记,并且''是您之间的实际"单词".

例如,如果你是分裂"x,y"',',你希望找回"X",""和'Y’.如果拆分",y"',',你回来"","",和'y’.所以,如果你分割"ay"'a',你的输出是"","a"和"Y".