ブラウザコンソールを開き、次のコードを実行します。
var foo = /foo/g;
それで、
foo.test("foo") // true
それで、
foo.test("foo") // false
foo.test( "foo")を実行し続けると、var fooが実際に変更されているかのように、true/falseの応答が交互に表示されます。
なぜこれが起こっているのか誰もが知っていますか?
ブラウザコンソールを開き、次のコードを実行します。
var foo = /foo/g;
それで、
foo.test("foo") // true
それで、
foo.test("foo") // false
foo.test( "foo")を実行し続けると、var fooが実際に変更されているかのように、true/falseの応答が交互に表示されます。
なぜこれが起こっているのか誰もが知っていますか?
はい、それが正規表現がグローバルな.test()
場合の方法です。彼らは最後の試合の終わりに始まります。.exec()
g
プロパティを使用して、正規表現オブジェクトの現在の最後のインデックスを確認でき.lastIndex
ます。
これは書き込み可能なプロパティなので、0
必要なときにリセットできます。一致が見つからずに正規表現が実行されると、自動的に にリセットされ0
ます。
正規表現は最後のテストの位置を保持します。これにより、長い文字列の検索が可能になります。これをリセットするには、lastIndex = 0; を設定します。