情况一,输出为true false false
let reg=new RegExp(/12/,'gi'); //也可以写成字面量形式 let reg=/12/gi;
['a312','12','a321'].forEach(element => {
console.log(reg.test(element))
});
//输出为:true false false
情况二,输出为 true true false
['a312','12','a321'].forEach(element => {
console.log(/12/gi.test(element))
});
//输出为:true true false
好奇怪!
求解释
正则的 lastIndex属性https://www.runoob.com/jsref/jsref-lastindex-regexp.html 导致的
每个RegExp都有一个lastIndex属性,当使用test方法且全局匹配时(g),如果能匹配到结果,则返回true,且lastIndex会改变,下一次再调用test方法时,会从lastIndex指定的位置处开始检索;如果不能匹配到结果,则返回false,且lastIndex属性置0
可以手动置为0:reg.lastIndex = 0,或者重新声明reg