問題
この文字列に一致する可能性があります
(xx)
この正規表現を使用して
\([^()]*\)
でも似合わないだろうな
(x(xx)x)
したがって、この正規表現は
\([^()]*\([^()]*\)[^()]*\)
ただし、これは一致しません。
(x(x(xx)x)x)
しかし、繰り返しになりますが、この新しい正規表現は
[^()]*\([^()]*\([^()]*\)[^()]*\)[^()]*
これは、レプリケーションに気付くことができる場所です。最初の正規表現の後、\(
最後の正規表現の前の 2 番目の正規表現の正規表現パターン全体\)
がコピーされ、中央の most が置き換えられます[^()]*
。もちろん、この最後の正規表現は一致しません
(x(x(x(xx)x)x)x)
ただし、最後の正規表現で行ったように、いつでも中央を最もコピーして置き換えることができ、[^()]*
より多くのグループを取得できます。正規表現に追加すればするほど、処理できる量は増えますが、常に追加する量に制限されます。[^()]*\([^()]*\)[^()]*
(xx)
では、この制限をどのように回避し、余分なグループを含めることができるかっこのグループ (または任意の 2 文字) をキャプチャするにはどうすればよいでしょうか?
誤って想定されたソリューション
私はあなたがただ使うと思うかもしれないことを知っています
\(.*\)
しかし、これはすべてに一致します
(xx)xx)
部分文字列のみに一致する必要がある場合(xx)
。
これでも
\([^)]*\)
のようにペアがネストされた括弧のペアには一致しません
(xx(xx)xx)
これから、 までしか一致しません(xx(xx)
。
出来ますか?
では、括弧のグループに一致する正規表現を書くことは可能でしょうか? それとも、これはルーチンで処理する必要があるものですか?
編集
ソリューションは、正規表現の JavaScript 実装で機能する必要があります