ホームページ  >  記事  >  ウェブフロントエンド  >  JS正規表現のtest()、exec()、match()の違いの比較(例付き)

JS正規表現のtest()、exec()、match()の違いの比較(例付き)

不言
不言オリジナル
2018-08-20 15:11:483506ブラウズ

この記事では、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 基本シリーズ正規表現

js の正規表現のバックトラッキングを正しく理解する方法

以上がJS正規表現のtest()、exec()、match()の違いの比較(例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。