重複の可能性:
非キャプチャグループ?
私はJavaScriptで正規表現を学習していますが、(?:x)
文字または「非キャプチャー括弧」は私には意味がありません。一致を覚えたくない場合は、かっこを完全に破棄しないのはなぜですか?/(?:x)/
だけでなく使用する利点は何/x/
ですか?
重複の可能性:
非キャプチャグループ?
私はJavaScriptで正規表現を学習していますが、(?:x)
文字または「非キャプチャー括弧」は私には意味がありません。一致を覚えたくない場合は、かっこを完全に破棄しないのはなぜですか?/(?:x)/
だけでなく使用する利点は何/x/
ですか?
他の理由で括弧が必要になる場合があるためです。たとえば、の末尾の数字をキャプチャするとしますabababababab9
。あなたが書いた場合ab*(\d)
、それは一致しabbbbbbbbb9
ます。オペレーターがすべてを繰り返すab
ように、括弧で囲む必要があります。。しかし、多分あなたは何回繰り返されたか気にしないでしょう。それはあなたが使うところです:。*
(ab)*(\d)
ab
(?:)
(?:ab)*(\d)
キャプチャスロットを無駄にすることなくサブパターン全体に適用される、代替一致または数量詞で使用されるサブパターンを定義するために必要です。たとえば、と(?:)
一緒に使用して|
、正規表現をキャプチャせずに正規表現の途中で代替一致を提供できます。
次の場合を考えてみましょう。
(?:aa|bb|cc)
(?:abc)?
非キャプチャグループを使用して、より複雑なサブパターンを持つパターンを照合できます。場合によっては、非キャプチャグループ構文を使用すると、より効率的な正規表現も得られます。
一致を覚えたくない場合は、かっこを完全に破棄しないのはなぜですか?/ x /だけでなく/(?: x)/を使用する利点は何ですか?
文字をグループ化したいが、覚えたくない場合に使用します。括弧を削除すると、文字のシーケンスをグループ化できなくなります。したがって、たとえば:
/foo|bar/.test("foo") // true
/foo|bar/.test("bar") // true
一致するパターンを実現したい場合で、中央の文字をグループ化する必要がfoor
あります。fbar
/f(?:oo|ba)r/.test("fbar") // true
/f(?:oo|ba)r/.test("foor") // true
もちろん、グループ化してグループを記憶することもできますが、代わりに、配列が返されるtest
usingまたは他のメソッドが重要である場合は、代わりにを使用する必要があります。match
(?: