请查看以下JavaScript。我已将其中的内容删除,因此您可以专注于问题的实质。

您会注意到,我连续两次调用prepPath函数,并传入完全相同的字符串。在firefox和IE8中,此功能每次都会警告真(如预期)。但是,在Chromium 5.0.375.127(55887)Ubuntu 10.04中,尽管输入保持完全相同,该函数第一次返回true,而第二次调用则为false!

<script type="text/javascript">
    function prepPath(str)
    {
        var regX = /[^\s/"'\\].*[^\s/"'\\]/g;
        if(regX.test(str))
        {
            alert("true: " + str);
        }
        else
        {
            alert("false; " + str);
        }
    }

    prepPath("/desktop"); // alerts: true
    prepPath("/desktop"); // alerts: false
</script>

为什么第二次在Chromium中返回假?

最佳答案

规范中对于何时应重置文字正则表达式存在一些歧义(请记住它们具有状态)。您可以通过以下方法解决此问题:

var regX = new RegExp(/[^\s/"'\\].*[^\s/"'\\]/g);

现场示例:http://jsbin.com/irate

或这个:
var regX = /[^\s/"'\\].*[^\s/"'\\]/g;
regX.lastIndex = 0;

现场示例:http://jsbin.com/irate/2

那些比我研究更多的人知道,它实际上并不是一个彻底的错误,而是一个模棱两可的问题。不仅是Chrome,其他版本的浏览器也有类似的问题。

07-26 08:01