下面运行代码是记录每次迭代的不同结果
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` ...
有人可以解释一下,为什么会这样?为什么在删除/g
全局修饰符时它才有效?
答案 0 :(得分:0)
如果您查看MDN documentation of test,您会发现它不是纯函数,但它有副作用会改变您的PS C:\> [object]$x = 'abc','def'
PS C:\> $x = $null
PS C:\> $x += 'abc'
PS C:\> $x += 'def'
PS C:\> $x
abcdef
变量:
在同一个全局正则表达式实例上多次调用的test()将超过上一个匹配
当使用<input type="submit" class="button primary" value="Submit" accesskey="s">
修饰符时,在耗尽所有匹配(即第一次迭代)之后,正则表达式位置将位于字符串的末尾,它将不匹配,但似乎存在未定义的行为,这会重置正则字符串位置到字符串的开头(根据您在第3次迭代时观察到的结果)
没有全局修饰符,正则表达式可以从起始位置多次执行