私のコードの面白い問題が見つかりました。 Hereは私のコードの簡略化されたバージョンです。 regex.test
を呼び出すと、そのたびに出力値が変更されます。あなたはdevtoolsで 'select on evaluation'を使ってそのことを試みることができ、異なる値が表示されます。RegExp.test(JavaScript)のバグ
2
A
答えて
4
Regexpで/g
を使用していますが、これが使用され、正規表現が複数回実行されると、前回終了した箇所から常に始まります。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex
このプロパティは、正規表現のインスタンスは、グローバル検索を指示するために「G」フラグを使用する場合にのみ設定されています。次の規則が適用されます
lastIndexのは、文字列、テスト()とexec()失敗の長さより大きい場合、lastIndexのが設定されているlastIndexの文字列の長さに等しい場合
0に正規表現が空の文字列と一致する場合、正規表現はlastIndexから始まる入力と一致します。
lastIndexの文字列の長さに等しく、正規表現が空の文字列は、正規表現の不一致入力を、一致しないとlastIndexのは、そうでなければ0
にリセットされる場合、lastIndexのがに設定されている場合直近の試合の次の順位。
あなたのループでconsole.log(regex.lastIndex)
をすることによってこれを確認することができます
for (var a = 0; a < 10; a++) {
console.log(regex.lastIndex)
if (!regex.test(inner)) {
log.innerHTML += "true";
}
else {
log.innerHTML += "false";
}
log.innerHTML += " ";
}
をそして、あなたはそれが18で開始したとき、それは、それが一致して、0から始まるとき、それは、だから、0 18の間に交互に表示されますそれは一致しません。
ありがとう – Herrgott