javascript正则表达式拆分产生太多项目

Phi*_*man 1 javascript regex split

我正在尝试使用逗号或空格分割字符串.逗号可以选择在空格之前和/或之后,空格本身也可以作为分隔符.代码如下所示:

var answers= s.split(/(\s*,\s*)|\s+/);
Run Code Online (Sandbox Code Playgroud)

如果s包含字符串'ab,c',我会得到一个包含五个项目而不是预期三个项目的列表(数组):

0:a,1:未定义,2:b,3:,, 4:c

任何关于我做错的建议都将受到赞赏.

菲利普

Ber*_*rgi 9

那是因为split还将捕获组推送到结果数组:

如果separator是包含捕获括号的正则表达式,则每次匹配时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中.

两者之间的空间ab空白相匹配,因此捕获组未定义.逗号b和之间的逗号c由组匹配,因此它成为数组的第四项.

要解决此问题,只需删除捕获组:

var answers = s.split(/\s*,\s*|\s+/);
Run Code Online (Sandbox Code Playgroud)

如果你有一个更复杂的表达式,你需要分组,你可以使它像这样非捕获:

var answers = s.split(/(?:\s*,\s*)|\s+/);
Run Code Online (Sandbox Code Playgroud)


Fel*_*ing 4

捕获组的内容将添加到结果数组中。来自MDN 文档

如果separator是包含捕获括号的正则表达式,则每次匹配分隔符时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中。但是,并非所有浏览器都支持此功能。

使用非捕获组:

/(?:\s*,\s*)|\s+/
Run Code Online (Sandbox Code Playgroud)