input正则邮箱_正则解读及常用表达式(有效数字、邮箱等)

2、正则的捕获是懒惰的

正则的每一次捕获都从lastIndex值开始,第一次捕获的时候,lastIndex=0,从原始字符串索引为0的位置开始查找捕获,而默认的情况下,第一次捕获完成,lastIndex的值并没有发生改变,还是0,所以第二次捕获还是从原始字符串索引为0处开始查找,这样找到的还是第一次捕获的内容

解决办法:添加全局修饰符g--->加上g后,第一次捕获完成后,lastIndex的值发生了改变,变为第一次捕获内容后的第一个字符的开始索引,第二次捕获是继续向后查找的...

疑问:不用全局修饰符g每次捕获完成后手动修改lastIndex的值不可以么?

不可以,虽然手动修改了lastIndex,确实把lastIndex的值进行改变了,但是正则查找的时候还是从索引0开始的

var str = "zhufeng2015peixun2016";

var reg = /\d+/g;

例子

为了防止没有加全局修饰符g导致的死循环,我们在处理之前,对于没有添加g的手动给添加一个g

RegExp.prototype.myExecAll = function myExecAll() {

var _this = this, str = arguments[0], ary = [], res = null;

!_this.global ? _this = eval(_this.toString() + "g") : null;

res = _this.exec(str);

while (res) {

ary[ary.length] = res[0];

res = _this.exec(str);

}

return ary;

};

var ary = reg.myExecAll(str);

console.log(ary);

console.log(reg.lastIndex);//->0

var res = reg.exec(str);

console.log(res);

console.log(reg.lastIndex);//->11

res = reg.exec(str);

console.log(res);

console.log(reg.lastIndex);//->21

res = reg.exec(str);

console.log(res);//->null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值