为什么在循环regexObj.test(str)时记录每次迭代的不同结果
Why when looping regexObj.test(str) is logging each iteration different result?
下面的代码记录每次迭代的不同结果
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
全局修饰符被删除?
如果您检查test的MDN文档,您会发现它不是一个纯函数,但它有一个副作用,改变了您的re
变量:
在同一个全局正则表达式实例上多次调用test()将超越前一个匹配
当使用/.../g
修饰符时,在耗尽所有匹配(即第一次迭代)之后,regex位置将位于字符串的末尾,它将不匹配,但似乎有一种未定义的行为,将regex位置重置为字符串的开头(根据您在第三次迭代中观察到的)
如果没有全局修饰符,regex可以从起始位置
相关文章:
- 从JSON API结果迭代时未定义
- 迭代 JSON 文件并且未在 Javascript 中正确返回结果
- Javascript表排序工作得很好,但对所有索引进行迭代会得到不同的结果
- OrientDB Javascript 服务器端函数内的结果迭代
- 如何将 for 循环的每次迭代的结果存储到数组中 (Javascript)
- 迭代结果的总和
- 如何在MongoDB-Shell中正确迭代搜索结果
- 如何在执行数组迭代时避免中间结果
- 用于循环行为的 Javascript 每次迭代输出相同的结果
- 使用 Node.jS 驱动程序在 MongoDB 中迭代多个集合并比较结果
- 在jade[node-mysql]中迭代mysql查询结果
- 如何在$.each()循环中保持$.ajax()异步,但对每次迭代的结果做出反应
- Angularjs:无法迭代或从服务结果中获取结果
- 循环的CasperJS为每次迭代生成相同的结果
- AngularJs:迭代键值对的奇怪结果
- 如何迭代jquery选择器的结果
- 如何迭代生成器函数的结果
- 如何在Nightwatch中迭代querySelectorAll结果
- 在不同数据上使用“tr”元素的undercore模板迭代会给出错误的结果
- JSON迭代结果…可以排序