1

次のテキストを検討してください。

aas(  I)f df (as)(dfdsf)(adf).dgdf(sfg).(dfdf) asdfsdf dsfa(asd #54 54 !fa.) sdf

括弧の間のテキストを取得したいのですが、隣接する括弧は 1 つの単位と見なす必要があります。どうやってやるの?

上記の例では、望ましい出力は次のとおりです。

  • ( 私)
  • (as)(dfdsf)(adf)
  • (sfg).(dfdf)
  • (asd #54 54 !fa.)
4

4 に答える 4

1

試してみてください[^(](\([^()]+([)](^[[:alnum:]]*)?[(][^()]+)*\))[^)]。キャプチャ グループ 1 が必要です。

この式は、括弧以外のあらゆる種類の文字が括弧の間のテキストに出現する可能性があり、ネストされた括弧のある部分と一致しないことを前提としています。

于 2013-03-15T14:03:13.433 に答える
1

私は一緒に行きます:/(?:\(\w+\)(?:\.(?=\())?)+/g

  • \(\w+\)a-zA-Z0-9_ リテラル中かっこ内に一致する
  • (?:\.(?=\())?.別の左中括弧が続く場合にのみリテラルをキャプチャする
  • (?:)+隣接するキャプチャを結合するために全体がラップされます
var str = "aas(I)f df (asdfdsf)(adf).dgdf(sfg).(dfdf) asdfsdf dsfa(asdfa) sdf";
str.match(/(?:\(\w+\)(?:\.(?=\())?)+/g);
// -> ["(I)", "(asdfdsf)(adf)", "(sfg).(dfdf)", "(asdfa)"]
于 2013-03-15T14:03:15.617 に答える
1

予測

  • ネストなし()、エスケープなし()
  • 括弧は、文字と一緒に連結する.か、互いに隣接させて連結します (柔軟なスペースは許可されません)。
  • (a)(b).(c)は単一のトークンと見なされます (これ.はオプションです)。

解決

以下の正規表現は、グローバル マッチング (match all) 関数で使用されます。

\([^)]*\)(?:\.?\([^)]*\))*

区切り文字はご自身で付けてください。

デモ

説明

正規表現の内訳 (間隔は重要ではありません)。afterと#include はコメントであり、正規表現の一部ではありません。

\(             # Literal (
[^)]*          # Match 0 or more characters that are not )
\)             # Literal ). These first 3 lines match an instance of wrapped text
(?:            # Non-capturing group
  \.?          # Optional literal .
  \([^)]*\)    # Match another instance of wrapped text
)*             # The whole group is repeated 0 or more times
于 2013-03-15T14:48:34.387 に答える
-2

これはトリックを行う必要があります:

\([A-Za-z0-9]+\)
于 2013-03-15T14:01:34.427 に答える