2

私はまだ正規表現にかなり慣れていません。私が普通にやりたいことは可能ですか、それともある種のトリックをしなければなりませんか?

中かっこのセットの間にないすべてのかっこのセットの間にすべてを取得したいと思います。これが私の言いたいことです。

{ This is {a} test }  { this {is a{ also a } } } test }

正規表現を返したいのですが

['This is {a} test', 'this {is a{ also a } } } test' ]

これは可能ですか?

編集:

私はこれをJavascriptで行っています。これが必要な理由は、次のような文字列を取得しているためです。

{ user entered value 1} {user entered value 2 }.....

すべてのユーザー値を取得する必要があります。ユーザーが「}」を入力すると、次のような文字列が表示される場合に注意する必要があります。

{これは{a}の問題です}{この{{は}}}}も}

編集2

私は自分のやり方を再設計することにしました。この正規表現はもう必要ありませんが、助けてくれたすべての人に感謝します。

4

3 に答える 3

4

標準の正規表現を使用することはできません。

これを行うには、中括弧のネストレベルをカウントする必要がありますが、正規表現では任意のネストをカウントすることはできません。最大n個のネストされたレベルに制限する場合は、そうすることができます。

于 2012-12-10T14:28:29.183 に答える
2

あなたはそれを行うことができますが、バランスの取れた丸括弧をチェックすることはトリッキーですが不可能ではありません

あなたはこれを試すことができます

{[^}]*({[^}{]*})?[^{]*}
      -----------
           |
           |->starting from the center..

そのような問題に使用regexすることは良い選択ではありません。

あなたはあなた自身のものでより良いparserです...

于 2012-12-10T14:44:27.650 に答える
0

それでもこの方法で実行したい場合は、正規表現をsplit関数と組み合わせて、値の配列を返すことができます。例:

str = '{ This is {a} test }  { this {is a{ also a } } } test }{ this }  test }';

これにより、文字列から最初と最後のブレースが削除され(を使用replace)、それに基づいて分割され} {ます(閉じブレースの後に0個以上のスペースが続き、次に開始ブレースが続きます)

arr = str.replace(/^\s*\{|\}\s*$/g,'').split(/\}\s*\{/);

配列を返します:

arr = [" This is {a} test ", " this {is a{ also a } } } test ", " this }  test "]
于 2012-12-10T15:08:34.387 に答える