请查看以下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中第二次返回false?
答案 0 :(得分:14)
关于何时应该重置文字正则表达式的规范存在一些含糊之处(回想一下它们有状态)。您可以通过以下方式解决此问题:
var regX = new RegExp(/[^\s/"'\\].*[^\s/"'\\]/g);
或者这个:
var regX = /[^\s/"'\\].*[^\s/"'\\]/g;
regX.lastIndex = 0;
那些比我更了解它的人告诉我这不是一个彻头彻尾的错误,而是一个含糊不清的错误。而且不只是Chrome,其他浏览器的某些版本也遇到了类似的问题。