我正在尝试使用逗号或空格分割字符串。逗号可以选择性地前面和/或后面跟空格,空格本身也算作分隔符。代码如下所示:
var answers= s.split(/(\s*,\s*)|\s+/);
如果s
包含字符串 'ab,c',我会得到一个包含五个项目而不是预期的三个项目的列表(数组):
0:a, 1:undefined, 2:b, 3:,, 4:c
任何关于我做错了什么的建议将不胜感激。
菲利普
我正在尝试使用逗号或空格分割字符串。逗号可以选择性地前面和/或后面跟空格,空格本身也算作分隔符。代码如下所示:
var answers= s.split(/(\s*,\s*)|\s+/);
如果s
包含字符串 'ab,c',我会得到一个包含五个项目而不是预期的三个项目的列表(数组):
0:a, 1:undefined, 2:b, 3:,, 4:c
任何关于我做错了什么的建议将不胜感激。
菲利普
捕获组的内容被添加到结果数组中。来自MDN 文档:
如果
separator
是包含捕获括号的正则表达式,则每次匹配分隔符时,将捕获括号的结果(包括任何未定义的结果)拼接到输出数组中。但是,并非所有浏览器都支持此功能。
使用非捕获组:
/(?:\s*,\s*)|\s+/
如果您只是删除括号,它将起作用:
var s = 'a,b,c'
var answers = s.split(/\s*,\s*|\s+/);
// [ 'a', 'b', 'c' ]
使用正则表达式,捕获表达式会(x)
记住匹配项(并可能将其返回给String.split
)。您应该使用(非捕获)分组表达式(?:x)
。有关更多信息,请参见例如关于 RegExp的Mozilla Docs。