js正则表达式分组问题
代码如下
reg = /(\d{3}\.){3}\d{3}/;
var str8 = "111.222.333.444";
console.log(str8.match(reg));
得出:Array [ "111.222.333.444", "333." ]
第一个结果可以理解,但是奇怪的是出现第二个结果.
想请教第二个结果出现的原因,以及应该怎么修改正则表达式才仅出现第一个结果.
谢谢大家~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
match
函数就是这样的,它的返回值是一个数组,数组第一项是完整的匹配结果,后面的依次为各个分组匹配的结果。分组就是括号里面的
子正则表达式
,每一对括号是一个分组,分组的次序以起始括号的顺序确定。比如(1(2))(3)
的次序将是1、2、3
,其中分组1
也包括分组2
匹配到的内容,因为它们是嵌套的。要想使
match
返回的结果里面不包含分组的内容,可以使用非捕获分组
:reg = /(?:\d{3}\.){3}\d{3}/;`
只要在括号中的子表达式前面加上
?:
即可。非捕获分组不会影响正则表达式的匹配结果(匹配到的结果与之前是一样的),但是它们不会被当做分组的结果返回,也就是不会出现在match
返回值的数组中。