JS正規表現を深く理解します---グループ化
私は以前に正規表現を始めることについての記事を書きました。私は通常の表現に比較的精通していると思っていましたが、今日は別の落とし穴に遭遇しました。たぶんそれは私が十分に注意していなかったからだったのかもしれません。今日は、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です。これも貪欲なパターンです。最初に、最初に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です。
非キャプチャグループ
非キャプチャグループは、一部の場所で一対のブラケットが必要であることを意味しますが、キャプチャグループになることを望んでいません。つまり、このグループをMacth Execのような機能によって取得したくありません。通常、それらは括弧(?:パターン)が先行しているため、非キャプチャグループになります。
var reg =/test(?:/d)+/; var str = 'new test001 test002'; console.log(str.match(reg)); // ["test001"、index:4、input: "new test001 test002"]]
このようにして、試合の試合の結果に一致するコンテンツはありません。つまり、2番目のアイテムが欠落していることを意味します。
この記事では、(/d+)と(/d)+の違いを説明することに焦点を当てています。これは、今日私が踏んだピットでもあります。間違いがある場合は、自由に修正してください。
上記の記事には、JSの正規表現を深く理解しています。グループ化は、私があなたと共有したすべてのコンテンツです。私はそれがあなたに参照を与えることができることを願っています、そしてあなたがwulin.comをもっとサポートできることを願っています。