この記事では、js 正規表現の test()、exec()、match() の違いと比較を (例とともに) 説明します。必要な方は参考にしていただければ幸いです。
1. 正規表現は通常、
2 つの文字列メソッド: search()、replace()
2 つの正規表現メソッド: test()、exec() で使用されます
search() メソッド: 正規表現を受け取りますを引数として指定し、最初に一致する部分文字列の開始位置を返します。一致する部分文字列がない場合は、-1 を返します。
replace() メソッド: 最初のパラメータは正規表現で、2 番目のパラメータは置換される文字列またはクロージャです。
test() メソッド: は、文字列が特定のパターンに一致するかどうかを検出するために使用されます。文字列に一致するテキストが含まれている場合は true を返し、そうでない場合は false を返します。
exec() メソッド: は、文字列内の正規表現の一致を取得するために使用されます。この関数は、一致する結果を含む配列を返します。一致するものが見つからない場合、戻り値は null になります。
match() メソッド: 唯一のパラメータは正規表現です。正規表現にフラグ g が含まれている場合、その戻り値には文字列に含まれる文字列が含まれます。マッチの。正規表現に g フラグが含まれていない場合は、最初の要素が一致した文字列で、残りの要素が正規表現内の個々のグループである配列も返します。 注: グローバル検索モードでは、match() は部分式に一致するテキストに関する情報を提供せず、一致する各部分文字列の位置も宣言しません。このグローバルに取得された情報が必要な場合は、RegExp.exec() を使用できます。
split() メソッド: はパターン マッチングをサポートできます。
2. RegExp オブジェクトは、exec() と test() という 2 つのメソッドを定義します
1 RegExp の exec() メソッドは、指定された String の match() メソッドを使用します。文字列に対して正規表現の一致を実行します。一致が見つからない場合は null を返し、それ以外の場合は配列を返します。この配列の最初の要素には正規表現に一致する文字列が含まれ、残りの要素には一致したグループが含まれます。さらに、正規表現オブジェクトの Index 属性には、一致が発生した文字列の位置も含まれており、input 属性は取得された文字列を参照します。
正規表現に g フラグがある場合、オブジェクトの lastIndex プロパティを一致する文字列の直後の位置に設定し、一致するものが見つからなかった場合は取得を開始します。この特別な動作により、exec() を繰り返し呼び出して、文字列内のすべての正規表現一致を反復処理することができます。
2. RegExp オブジェクトの test() パラメータは文字列です。この文字列に正規表現の一致が含まれる場合は true を返し、それ以外の場合は false を返します。
g フラグを指定した正規表現が test() メソッドを呼び出すと、これは exec() と同じように動作します。つまり、lastIndex から始まる特定の文字列を取得し、一致が見つかった場合は、lastIndex をその一致の直後の文字の位置に設定します。そのため、メソッド test を使用できます。 () は文字列をトラバースするために使用されます。
test
test は、対応する文字列にパターンが存在するかどうかを調べるためにブール値を返します。
var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.test(str)); // true
exec
exec は、現在の一致結果を検索し、配列として返します。
var str = "1a1b1c"; var reg = new RegExp("1.", ""); var arr = reg.exec(str);
パターンが存在しない場合、arr は null になります。それ以外の場合、arr は常に長さ 1 の配列であり、その値は現在一致するものになります。 arr には 3 つの属性もあります。index は現在の一致の位置、lastIndex は現在の一致の終了位置 (インデックス + 現在の一致の長さ) です。上記の例では、input は str です。
exec メソッドはパラメータ g の影響を受けます。 g を指定すると、次回 exec が呼び出されたときに、最後に一致した lastIndex から検索が開始されます。
var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.exec(str)[0]); alert(reg.exec(str)[0]);
上記の出力はどちらも1aです。次に、指定されたパラメーター g を見てください:
var str = "1a1b1c"; var reg = new RegExp("1.", "g"); alert(reg.exec(str)[0]); alert(reg.exec(str)[0]);
上記の最初のパラメーターは 1a を出力し、2 番目のパラメーターは 1b を出力します。
match
hjvar str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(str.match(reg));
e メソッドは exec に少し似ていますが、exec は RegExp オブジェクトのメソッドであり、 math は String オブジェクトのメソッドです。両者の間にはもう 1 つの違いがあります。それは、e パラメータ g の解釈です。
パラメータ g が指定されている場合、match はすべての結果を一度に返します。
var str = "1a1b1c"; var reg = new RegExp("1.", "g"); alert(str.match(reg)); //alert(str.match(reg)); // 此句同上句的结果是一样的
この結果は、1a、1b、1c の 3 つの要素を含む配列です。
compile メソッドは正規表現を内部形式にコンパイルするため、実行が高速になります。
var reg = new RegExp(); reg.compile("[a-z]{5}", "g"); alert(reg.test("cftea"));
同じ正規表現を複数回(ループ内などで)使用すると、その効果は大きくなります。
関連する推奨事項:
以上がJS正規表現のtest()、exec()、match()の違いの比較(例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。