JavaScript中的正则表达式在其他时间都以相同的输入失败

参见英文答案 > Why RegExp with global flag in Javascript give wrong results?                                    4个
一个简单的测试脚本:

<script type="text/javascript">
    var reg = new RegExp('#([a-f0-9]{3})$', 'gi');
    for (var i = 0; i < 10; i++) {
        console.log(reg.exec('#fff'));
    }
</script>

控制台输出:

["#fff", "fff"]
null
["#fff", "fff"]
null
["#fff", "fff"]
null
["#fff", "fff"]
null
["#fff", "fff"]
null

当输入保持不变时,为什么其他结果为空?

最佳答案
当使用全局标志时,正则表达式变得“粘”.也就是说,它使用一个计数器变量来跟踪最后一次匹配的位置.而不是每次从头开始匹配,粘性正则表达式实际上会在最后一场比赛结束的地方拿起.如果整个匹配失败(这就是为什么它每隔一段时间工作),这个计数器只会重新设置为0(开始)

在你的情况下,我的建议是放弃g旗.

欲了解更多信息:RegExp @ MDC

转载注明原文:JavaScript中的正则表达式在其他时间都以相同的输入失败 - 代码日志