JS 正規表現テスト方法とその落とし穴についての深い理解

不言
リリース: 2018-07-11 09:55:41
オリジナル
2289 人が閲覧しました

この記事では、JS 正規表現をより深く理解するためのテスト方法とそのトラップを主に紹介します。必要な友人に参考にしてください。

テスト方法の紹介。

RegExp.prototype.test(str)
ログイン後にコピー

テストメソッドは、文字列パラメータに正規表現パターンに一致する文字列があるかどうかをテストするために使用されます

テストメソッドの使い方

let reg = /\w/

reg.test('a')       // true

reg.test('$')       // false
ログイン後にコピー

テスト文字列パラメータに正規表現パターンに一致する文字列がある場合は true を返し、それ以外の場合は 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 に設定し、ループを再開します。

テストの落とし穴を避ける方法

1つ目の方法: テストメソッド自体は、グローバルモードを使用しなくても目的を達成できるため、テストメソッド自体を使用しません。グローバルモードを適用します。

2 番目の方法: 通常のオブジェクト インスタンスを変数に格納せず、毎回通常のオブジェクト インスタンスを使用してテスト メソッドを直接呼び出します。ただし、この方法はメモリを消費するため、理論上お勧めできません。

上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

JS 正規表現の REGEXP オブジェクト属性の分析についての深い理解


JS 正規表現のグループ化の分析についての深い理解


JS正規表現のgreedyモードとgreedyモードのnon-greedyモードの解析

以上がJS 正規表現テスト方法とその落とし穴についての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート