首页 > js正则表达式分组问题

js正则表达式分组问题

代码如下

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

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

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


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

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

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

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

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

【热门文章】
【热门文章】