我写了一个 Javascript RegExp 测试来检测日期字符串格式,我错误地添加了一个多余的“g”标志并发现了一些有趣的东西。
var s = "2009/03/10";
var regex=/^\d{4}[/]\d{2}[/]\d{2}$/g;
alert(regex.test(s));
alert(regex.test(s));
alert(regex.test(s));
alert(regex.test(s));
我得到了一个“真”,然后是一个“假”,然后是另一个“真”,然后是另一个“假”。
如果我使用循环来执行它,我发现了一些更有趣的东西,我在 IE 和 Safari 中得到了四个“true”,在 FF、Chrome 中得到了 true、false、true、false。
for (var i=0; i<4; i++)
{
var s = "2009/03/10";
var regex=/^\d{4}[/]\d{2}[/]\d{2}$/g;
alert(regex.test(s));
}
有没有人想解释为什么 Javascript 正则表达式的行为如此,以及是什么导致浏览器返回不同的结果?(与变量声明和生命范围有关?)