首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在String.split()中使用捕获组

在String.split()中使用捕获组
EN

Stack Overflow用户
提问于 2018-12-13 00:37:30
回答 3查看 0关注 0票数 0
代码语言:javascript
复制
$ 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而不是节点。

EN

回答 3

Stack Overflow用户

发布于 2018-12-13 09:19:49

因为{2}在捕获括号之外,我猜它会分裂为2个字符,但只捕获第一个字符。

如果您移动括号内的{2}:

代码语言:javascript
复制
"ababaabab".split(/(a{2})/)

然后你会得到的

代码语言:javascript
复制
["abab", "aa", "bab"]

如果您不想要'aa',请不要将其分组到括号中。即

代码语言:javascript
复制
"ababaabab".split(/a{2}/)

输出

代码语言:javascript
复制
["abab", "bab"]
票数 0
EN

Stack Overflow用户

发布于 2018-12-13 10:31:34

拆分持续捕获组。这就是你在结果中看到它的原因。

票数 0
EN

Stack Overflow用户

发布于 2019-03-28 09:19:30

js高程p129页。ecma-262规定要将捕获组拼接到结果数组中。至于为什么只返回一个a,捕获组和(a){2}不是一个概念。捕获组中的内容,就只有一个a。你可以使用match测一下看看数组里的捕获组返回什么,或者用其他方法的$1返回第一个捕获组。另外感谢你提出这个问题,我才看明白这一句话说的是什么意思:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档