Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在循环regexObj.test(str)时记录每个迭代的不同结果?_Javascript_Regex - Fatal编程技术网

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
修饰符时,在用尽所有匹配项(即第一次迭代)后,正则表达式位置将位于字符串的末尾,在那里它将不匹配,但似乎有一个未定义的行为将正则表达式位置重置为字符串的开头(根据您在第三次迭代中观察到的情况)

如果没有全局修饰符,可以从起始位置多次执行正则表达式