ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptの正規表現におけるグループ化の詳しい説明

JavaScriptの正規表現におけるグループ化の詳しい説明

高洛峰
高洛峰オリジナル
2017-01-20 13:47:051475ブラウズ

以前、正規表現については比較的よく理解できたつもりで記事を書きましたが、今日は JavaScript についての共有に焦点を当てます。式のグループ化。 JS 正規表現について十分に理解していない場合は、ここをクリックして詳細を確認してください。

グループ化は、正規表現で広く使用されています。私が理解しているグループ化は、括弧 () のペアです。

グループ化は、次のように分類できます。

グループ化のキャプチャ

グループ化のキャプチャでは、match exec などの関数の 2 番目と 3 番目の項目の形式で、対応するグループ化の結果を取得します。まず例を見てみましょう

var reg = /test(\d+)/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", "001", index: 4, input: "new test001 test002"]


コード内の (d+) はグループ (サブパターンと呼ぶ人もいます) ですが、同じことを意味します。上の例では、test001 が完全一致の結果です。 ,

ただし、グループマッチングとは、完全一致結果全体 (つまり、test001) からサブパターン d+ に一致する文字を見つけることです。これは明らかに 001 です。

しかし、今日遭遇した状況は次のようなものです

var reg = /test(\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", "1", index: 4, input: "new test001 test002"]


違い つまり、(d+) は (d)+ に変更されます。全体のマッチング結果は test001 のままですが、最初のグループのマッチング結果は異なります。

それらの違いをゆっくり分析してみましょう

(d+) これはグループ化の状況です。デフォルトではマッチングモードが貪欲モードであるため、これはできるだけ多くのマッチングを意味します
すべての d+ マッチング結果は 001 で、次に のペアです括弧はグループの外側に追加されるため、最初のグループのマッチング結果は 001 になります。

2 番目の例の (d)+ を見てみましょう。これも貪欲モードであり、最初に 0 がマッチングされ、次に 0 がマッチングされます。 0 まで、最後の 1 まで一致し、一致の最後まで一致します


最初の例の一致と変わらないようですが、ここでのグループ化 (d) は単一の一致を意味します。番号、


私の以前の理解によれば、最初の一致結果である 0 と一致しますが、この理解は間違っています。マッチング全体が貪欲モードであるため、グループ内でできるだけ多くのマッチング


(d)を行うと、最後に一致した結果1がキャプチャされます

非貪欲モードの場合は、可能な限り少数のマッチングになります

var reg = /test(\d)+?/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
 
//["test001", "0", index: 4, input: "new test001 test002"]

このように、(d)のマッチング結果は0になります。この後もマッチング結果はありますが、ここではできるだけ少ないマッチング結果を載せておきます

非キャプチャーグループ化

var reg = /test(?:\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", index: 4, input: "new test001 test002"]

非キャプチャーグループ化もいくつかあります場所 括弧のペアを使用する必要がありますが、キャプチャ グループにはしたくない、つまり、このグループが macth exec などの関数によって取得されたくない場合

通常は前に ?: を追加します括弧内、つまり (?: パターン) は非キャプチャ グループ化になります。

このように、グループ化に一致するコンテンツは一致結果に表示されません。つまり、2 番目の項目 1 は

この記事は (d+) に焦点を当てています。 (d)+ との違いは、今日私が踏み込んだ落とし穴でもあります。間違いがあれば修正してください。

JavaScript の正規表現におけるグループ化の詳細な説明と関連記事については、PHP 中国語 Web サイトに注目してください。

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