ホームページ >ウェブフロントエンド >jsチュートリアル >RegExp の「test()」メソッドがグローバルおよび大文字小文字を区別しないフラグを使用して予期しない結果を返すのはなぜですか?
質問:
正規表現を使用する場合グローバル フラグ (g) と大文字小文字を区別しないフラグ (i) について、テスト メソッドが誤った結果を生成するのはなぜですかユーザー生成の入力?
例:
次のコードを考えてみましょう:
var query = 'Foo B'; var re = new RegExp(query, 'gi'); var result = []; result.push(re.test('Foo Bar')); result.push(re.test('Foo Bar')); // result will be [true, false]
期待される結果: [true, true]
説明:
g フラグを持つ RegExp オブジェクトは、最後の一致の位置を示す lastIndex プロパティを維持します。 lastIndex をリセットせずにテスト メソッドが繰り返し呼び出される場合、検索は 0 から開始するのではなく、最後に使用されたインデックスから再開されます。
デモ:
var query = 'Foo B'; var re = new RegExp(query, 'gi'); console.log(re.lastIndex); // 0 console.log(re.test('Foo Bar')); // true console.log(re.lastIndex); // 6 console.log(re.test('Foo Bar')); // false console.log(re.lastIndex); // 6
上記の例では、test への最初の呼び出しで lastIndex が 6 に設定されます。その後、2 番目の呼び出しでインデックス 6 から検索が再開されます。検索範囲は最後に一致した文字に続く文字に制限されるため、結果は false になります。
以上がRegExp の「test()」メソッドがグローバルおよび大文字小文字を区別しないフラグを使用して予期しない結果を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。