正则表达式的全局匹配模式
⾸先,要明确⼀点,所有的正则表达式都有⼀个lastIndex属性,⽤于记录上⼀次匹配结束的位置。如果不是全局匹配模式,那lastIndex的值始终为0,在匹配过⼀次后,将会停⽌匹配。
正则表达式的全局匹配模式,就是在创建正则表达式的时候使⽤g标识符或者将global属性设置为true,在全局匹配模式下,正则表达式会对指定要查的字符串执⾏多次匹配。每次匹配使⽤当前正则对象的lastIndex属性的值作为在⽬标字符串中开始查的起始位置。如果不到匹配的项lastIndex的值会被重新设置为0。
理解了上⾯的话,下⾯代码的结果就很清晰了:
1var regex = /abc/g;
2var str = '123#abc';
3 console.log(regex.lastIndex); // 0
4 console.st(str)); // true
5 console.log(regex.lastIndex); // 7
6 console.st(str)); // false
7 console.log(regex.lastIndex); // 0
8 console.st(str)); // true
9 console.log(regex.lastIndex); // 7
10 console.st(str)); // false
今天在写表单验证的时候遇到⼀个问题,每当偶数次点击的时候就会报错,就是这个问题造成的,解决⽅法也很简单,就是去掉正则表达式⾥⾯的g。
关于(str)⽅法和String.prototype.math(rgExp)⽅法:
(str)⽅法返回NULL或返会⼀个数组,在数组的第0个元素存放的是在字符串str中查到的匹配内容,1到n个元素返回的是在模式中使⽤括号"()"指定的⼦匹配项的内容。regex匹配
在没有使⽤全局标志时String.prototype.math(rgExp)⽅法和(str)的⾏为类似。当设置了全局匹配标志时
String.prototype.math(rgExp)⽅法返回的数组项元素0到n中包含了所有匹配到的项不包含⼦匹配项。这时可以使⽤RegExp.$1..$9获取9个⼦匹配。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论