$ node
> "ababaabab".split(/a{2}/)
[ 'abab', 'bab' ]
> "ababaabab".split(/(a){2}/)
[ 'abab', 'a', 'bab' ]
>
所以,这对我来说没有意义。有人可以解释一下吗?我不明白为什么要'a'
出现。
注意:我正在尝试匹配双倍的行结尾(可能在Windows文件中),所以我分裂/(\r?\n){2}/
。但是我'\015\n'
在我的数组中得到了无关的条目(注释\015 == \r
)。
为什么会出现这些?
注意:也影响浏览器中的JS引擎,因此这特定于JS而不是节点。
发布于 2018-12-13 09:19:49
因为{2}在捕获括号之外,我猜它会分裂为2个字符,但只捕获第一个字符。
如果您移动括号内的{2}:
"ababaabab".split(/(a{2})/)
然后你会得到的
["abab", "aa", "bab"]
如果您不想要'aa',请不要将其分组到括号中。即
"ababaabab".split(/a{2}/)
输出
["abab", "bab"]
发布于 2018-12-13 10:31:34
拆分持续捕获组。这就是你在结果中看到它的原因。
发布于 2019-03-28 09:19:30
js高程p129页。ecma-262规定要将捕获组拼接到结果数组中。至于为什么只返回一个a,捕获组和(a){2}不是一个概念。捕获组中的内容,就只有一个a。你可以使用match测一下看看数组里的捕获组返回什么,或者用其他方法的$1返回第一个捕获组。另外感谢你提出这个问题,我才看明白这一句话说的是什么意思:)
https://stackoverflow.com/questions/-100006274
复制相似问题