Javascript 为什么在循环regexObj.test(str)时记录每个迭代的不同结果?
下面运行的代码记录每个迭代的不同结果Javascript 为什么在循环regexObj.test(str)时记录每个迭代的不同结果?,javascript,regex,Javascript,Regex,下面运行的代码记录每个迭代的不同结果 var re = /[a-z]+/g; var str= 'test'; for(var i = 0; i < 5; i++) { console.log(re.test(str)); } // result : first iteration logs `true`, second `false`, third `true` ... var re=/[a-z]+//g; var str=‘测试’; 对于(变量i=0;i
var re = /[a-z]+/g;
var str= 'test';
for(var i = 0; i < 5; i++) {
console.log(re.test(str));
}
// result : first iteration logs `true`, second `false`, third `true` ...
var re=/[a-z]+//g;
var str=‘测试’;
对于(变量i=0;i<5;i++){
控制台日志(重新测试(str));
}
//结果:第一次迭代记录'true',第二次'false',第三次'true'。。。
有人能解释一下,为什么会这样?当删除了/g
全局修饰符时,它为什么会工作 如果您检查,您会发现它不是一个纯函数,但它有一个副作用,会改变您的re
变量:
在同一全局正则表达式实例上多次调用test()将超过上一个匹配项
当使用/…/g
修饰符时,在用尽所有匹配项(即第一次迭代)后,正则表达式位置将位于字符串的末尾,在那里它将不匹配,但似乎有一个未定义的行为将正则表达式位置重置为字符串的开头(根据您在第三次迭代中观察到的情况)
如果没有全局修饰符,可以从起始位置多次执行正则表达式