2013-10-16 10 views
11

OKの正規表現の質問、2つの文字の間の文字を抽出する方法、この場合は角かっこ。正規表現は、2つの角かっこの間にない文字列を抽出します

私は以下のような文字列を持っています: word1 | {word2 |単語3} |単語4

私は括弧で囲まれた2番目ではなく、最初と最後の 'パイプ'を取得したいだけです。私は、ネガティブなカラットとネガティブなグループ分けで無数の試みを試みましたが、それを働かせるようには見えません。

私は基本的にJavaScriptの分割関数でこの正規表現を使用して、これを "word1"、 "{word2 | word3}"、 "word4"の配列に分割しています。

ご協力いただければ幸いです!

+0

「バー」とは何ですか?それはあなたの例ではありません。 –

+0

あなたはどの言語やツールを使用していますか?あなたが試したことのいくつかを私たちに見せてもらえますか? –

+0

@CarlNorum彼は、**垂直バーの前にある 'word1'を意味します**' | ':) –

答えて

17

、これは内部{}はないパイプシンボルの全てと一致している必要があり、このテキスト

word1 | {word2 | word3 } | word 4 | word 4 | {word2 | word3 } 

でこのパターン

/\|(?![^{]*})/g 

を使用してみてください。

+0

ダイバーに感謝、これはトリックでした! –

12

は、あなたが使用している言語/実装に依存しますが、...

\|(?![^{]*}) 

これは{が最初に来る場合を除いて}続いないあるパイプと一致します。


(?! ...)

負の先読みアサーションとして知られています。

\|(?=[^{]*}) 

上記のみ{最初に遭遇することなく}続いをあるパイプと一致します。私たちは先読みアサーションで始まる場合、これは理解しやすいです。 =!に置き換えて無効にした場合、肯定の場合にはの場合はとなります(補完とも呼ばれます)。 JavaScriptにrefiddle.comセットに

+0

ここで先を見てみませんか? – hwnd

+2

@hwnd - Hm、おそらくそれは可能ですが、私は方法を見ていません。あなたは思っていることを投稿しますか?私は興味がある! –

+2

ありがとうございます。したがって、これらの中にはほとんど説明がありません。 –

関連する問題