我不明白这一点。
> 'a\nb'.split(/\n/)
[ 'a', 'b' ]
> 'a\nb'.split(/(\n)/)
[ 'a', '\n', 'b' ]
为什么?
答案 0 :(得分:2)
如果分隔符是包含捕获括号的正则表达式,则每次匹配时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中。
引用ECMAScript 5.1 Standard Specification for String.prototype.split
,
如果分隔符是包含捕获括号的正则表达式,则每次匹配分隔符时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组。例如,
"A<B>bold</B>and<CODE>coded</CODE>".split(/<(\/)?([^<>]+)>/)
计算数组
["A", undefined, "B", "bold", "/", "B", "and", undefined, "CODE", "coded", "/", "CODE", ""]
因此split
仅按预期工作。