私は日付文字列形式を検出するためにJavascript RegExpテストを書いたが、冗長な "g"フラグを誤って追加して面白いものが見つかった。Javascriptの興味深いテストRegExp
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で4つの「真」が得られ、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正規表現がそのように動作し、ブラウザが異なる結果を返す原因を説明するアイデアはありますか?
おかげで多くを見る、MDCの、について説明は非常に明確です。 – Darkthread
+1それぞれのテストが私の問題を解決する前に、reg.lastIndex = 0に設定していただきありがとうございます。 – bendewey
ループ内で問題が発生している場合は、各テストの前にlastIndex = 0に設定することができます。 – k0nG