js正则表达式分组问题

发布于 2022-09-01 18:59:52 字数 252 浏览 16 评论 0

代码如下

reg = /(\d{3}\.){3}\d{3}/;
var str8 = "111.222.333.444";
console.log(str8.match(reg));

得出:Array [ "111.222.333.444", "333." ]

第一个结果可以理解,但是奇怪的是出现第二个结果.
想请教第二个结果出现的原因,以及应该怎么修改正则表达式才仅出现第一个结果.
谢谢大家~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谜兔 2022-09-08 18:59:52

match函数就是这样的,它的返回值是一个数组,数组第一项是完整的匹配结果,后面的依次为各个分组匹配的结果。

分组就是括号里面的子正则表达式,每一对括号是一个分组,分组的次序以起始括号的顺序确定。比如(1(2))(3)的次序将是1、2、3,其中分组1也包括分组2匹配到的内容,因为它们是嵌套的。

要想使match返回的结果里面不包含分组的内容,可以使用非捕获分组

reg = /(?:\d{3}\.){3}\d{3}/;`

只要在括号中的子表达式前面加上?:即可。非捕获分组不会影响正则表达式的匹配结果(匹配到的结果与之前是一样的),但是它们不会被当做分组的结果返回,也就是不会出现在match返回值的数组中。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文