javascript - js正则表达式分组问题
迷茫
迷茫 2017-04-10 15:59:13
[JavaScript讨论组]

代码如下

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

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

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
大家讲道理

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

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

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

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号