この記事では、JS 正規表現をより深く理解するためのテスト方法とそのトラップを主に紹介します。必要な友人に参考にしてください。
RegExp.prototype.test(str)
テストメソッドの使い方
let reg = /\w/ reg.test('a') // true reg.test('$') // false
テストメソッドの落とし穴
let reg = /\w/g reg.test('ab') // true reg.test('ab') // true reg.test('ab') // false reg.test('ab') // true
各ラウンドの 3 番目の一致 戻り値は true になりますが、
はすべて reg に準拠していませんか? 戻り値は true を返す必要があります。その理由は、前のセクションで説明した lastIndex 属性にあります。ab
テストメソッドを実行するたびに reg を出力する lastIndex メソッドを試すことができます:
let reg = /\w/g reg.lastIndex // 0 reg.test('ab') // true reg.lastIndex // 1 reg.test('ab') // true reg.lastIndex // 2 reg.test('ab') // false reg.lastIndex // 0 reg.test('ab') // true reg.lastIndex // 1
結果を見て、lastIndex の定義を思い出してください。理由がわかるでしょう。
lastIndex 属性は、現在の式で一致した最後の文字の最後の桁で、次の一致の開始位置を指定するために使用されます。
正規表現グローバル モードに入ると、テスト メソッドが使用されるたびに、lastIndex から開始され、lastIndex から始まる部分文字列と一致します。たとえば、この例では、テスト メソッドが 2 回目に実行されると、lastIndex が 2 に変更され、部分文字列が空になっているため、reg はそれと一致できません。部分文字列の一致に失敗したため、テスト メソッドは false を返し、lastIndex 属性を 0 に設定し、ループを再開します。
テストの落とし穴を避ける方法
2 番目の方法: 通常のオブジェクト インスタンスを変数に格納せず、毎回通常のオブジェクト インスタンスを使用してテスト メソッドを直接呼び出します。ただし、この方法はメモリを消費するため、理論上お勧めできません。
上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
JS 正規表現の REGEXP オブジェクト属性の分析についての深い理解 JS 正規表現のグループ化の分析についての深い理解 JS正規表現のgreedyモードとgreedyモードのnon-greedyモードの解析以上がJS 正規表現テスト方法とその落とし穴についての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。