JS中正则式reg问题
先来看看下面这段代码
var flag = true;
var reg=/^(?:[0-9]?|10)$/g;
var iptList = $(".ipInter");
for(i=0;i<iptList.length;i++){
if(!reg.test(iptList[i].value)){
flag =false
}
}
console.log(flag);
这段代码中 ipList 每个的值 value 都为 “0”;
正则表达式的作用是匹配 0-10 的数字
但是结果输出却为 false;
在 debugger 中可以看到,没两次循环,就会有一次判定为false
看看更改后的代码:
var flag = true;
var iptList = $(".ipInter");
for(i=0;i<iptList.length;i++){
var reg=/^(?:[0-9]?|10)$/g;
if(!reg.test(iptList[i].value)){
flag =false
}
}
console.log(flag);
将 reg 声明定义在循环内部,每次循环都会初始化一个新的 reg
此时结果输出为 true
由此可见,reg 字面量定义的正则式是不具有重复性的!
这是因为RegExp.test()方法,第一次从位置0开始查找,可以匹配;第二次的查找位置就不是0了,说以就不能匹配了。
解决方法也很简单:
- 如上第二段代码,每次使用重新初始化。
- reg.lastIndex = 0; 让test每次从0开始匹配!