在Javascript中:
i+1
输出:var myString = "This is my string";
console.log(myString.split(/(\s)/));
["This", " ", "is", " ", "my", " ", "string"]
输出:console.log(myString.split(/\s/));
为什么会这样?
答案 0 :(得分:2)
您使用的两个正则表达式略有不同。
/(\s)/
有一个\s
的捕获组,因此当与split()
一起使用时,它会将捕获组中找到的任何内容添加到数组中。
正则表达式/\s/
没有捕获组,因此split()
会忽略匹配项并且不会将它们添加到数组中。
同样,如果你执行:
var myString = "This is my string";
console.log(myString.split(/(my)/)); //includes matched capture group in results
console.log(myString.split(/my/)); //ignores matches
将输出:
["这是","我的","字符串"]
["这是","字符串"]
希望有所帮助!
答案 1 :(得分:0)
如果您对拆分模式使用“捕获”组,那么假设您可能对该组感兴趣,因此Javascript会将该组添加到结果中。
例如,如果您使用“非捕获”组,则拆分的结果与完全不使用组时的结果相同。
"This is my string".split(/(?:\s)/) → ["This", "is", "my", "string"]
实际上,在某些情况下,您可能需要一个匹配的捕获组(例如,如果您需要反向引用),但您对分隔符不感兴趣。这些情况下的解决方法是简单地保留结果的每个其他元素。