佚名通过本文主要向大家介绍了js正则表达式,js正则表达式验证,js正则表达式语法,js手机号码正则表达式,js正则表达式大全等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:js正则表达式分组问题
描述:
解决方案1:
描述:
代码如下
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
返回值的数组中。