2017-06-07 21 views
1

私は次の文字列の例があります。文字列内で一致しますが、括弧の間の一致を無視 - 正規表現とJavaScript

"1. go [south], but look out for the trout pouting [lout]" 
"2. go [south], but be wary of the pouting [lout]" 
"3. go [south], but be wary of the sullen-looking [lout]" 

それは、各文字列に表示されている場合、私は一致するから問合せワードをたいと思いますが、角括弧の間にある場合は無視されます。だから私は一致しているよ。うちため

  1. はFalseを怒っため
  2. を怒っマス

私は限り、この式のように得ることができました:

/[^\(\)\[\]]out\s(?![\]])/ig 

はしかし、それだけでアウトマスのための最初の文字列に一致しています。

私は、空白文字が怒っと一致しないため、ここで影響を与える要因であることを考え出し、それを取り除くことは、あまりにも、カッコ内のすべてのものと一致しました。

これに対して正しい正規表現は何でしょうか? [...]を想定し

+0

です:

Javascriptコードは、あなたの正規表現を構築するには? – ClasG

+0

'out \ s'を' out [a-z0-9] 'に変更してみてください.'outの後に文字を入れることができます – Rajesh

+0

ああ、私はとても近かった!あなたの答えをありがとう、Rajesh! – Jon

答えて

0

はあなたが否定先読みベースの検索を使用することができ、バランスのとれエスケープです:

/out(?![^\[\]]*\])/ 

(?![^\[\]]*\])たちは非[と非]]を持っていないと主張否定先読みであります文字を先に入力して[...]の中にoutと一致していないことを確認してください。それはスペースを入れずに、カッコ内は常に1つの単語

search = "out"; 
var regex = new RexExp(search + "(?![^\\[\\]]*\\])", "g"); 

RegEx Demo

+1

Rajeshは上記の良い答えをくれましたが、より強固なので、私はあなたの方法についていくつもりです。助けてくれてありがとう、Anubhava。 – Jon

関連する問題