在正则捕获中,我们加修饰符"g", 可以取消捕获时候的懒惰性,原理:
正则中有一个lastIndex属性,它代表下一次正则捕获的开始索引,但是默认这个值永远是0,也就是不管执行几次,exec都用重新从头开始捕获,所以获取的都是同一个结果,而加了修饰符"g", 每次exec执行完成之后,我们的lastIndex属性的值都等于当前捕获的内容的后一个索引,下一次从这之后继续查找捕获,这样就可以一次次地执行,把想要的结果都捕获到了。
var reg = /\d+?/g;
var str = "zmnqane2011huiknag2018";
//console.log(reg.lastIndex);
//var ary = reg.exec(str);
//console.log(ary);
//console.log(reg.lastIndex);
//console.log(ary);
var reg = reg.exec(str), ary = [];
while(res) {
ary.push(res[0]);
res = reg.exec(str);
}
console.log(ary)//--["2","0","1","1","2","0", "1", "8"]
match字符串用来匹配正则的一个方法:
var reg = /\d+?/g;
var str = "zmnqane2011huiknag2018";
var ary = str.match(reg);
console.log(ary); //["2", "0", "1", "1", "2", "0", "1", "8"]
// match一次性把符合大正则都存放在一个数组中,如果也需要捕获小分组中的内容,match是捕获不到的
String.prototype.match = function (reg) {
// this --> str我们想操作的那个字符串-->原型上的方法,里面的this都是我们要操作的当前的实例
var ary = [];
var res = reg.exec(this);
while (res) {
ary.push(res[0]);
res = reg.exec(this);
}
return ary;
}
str.match(reg)
网友评论