ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptの正規表現におけるグループ化の詳しい説明
以前、正規表現については比較的よく理解できたつもりで記事を書きましたが、今日は 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"]
ただし、グループマッチングとは、完全一致結果全体 (つまり、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+ マッチング結果は 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 サイトに注目してください。