13

ブラウザコンソールを開き、次のコードを実行します。

var foo = /foo/g;

それで、

foo.test("foo") // true

それで、

foo.test("foo") // false

foo.test( "foo")を実行し続けると、var fooが実際に変更されているかのように、true/falseの応答が交互に表示されます。

なぜこれが起こっているのか誰もが知っていますか?

4

2 に答える 2

15

はい、それが正規表現がグローバルな.test()場合の方法です。彼らは最後の試合の終わりに始まります。.exec()g

プロパティを使用して、正規表現オブジェクトの現在の最後のインデックスを確認でき.lastIndexます。

これは書き込み可能なプロパティなので、0必要なときにリセットできます。一致が見つからずに正規表現が実行されると、自動的に にリセットされ0ます。

于 2013-03-07T16:46:51.390 に答える
1

正規表現は最後のテストの位置を保持します。これにより、長い文字列の検索が可能になります。これをリセットするには、lastIndex = 0; を設定します。

于 2013-03-07T16:48:28.670 に答える