2017-06-07 31 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. 鱒魚撅嘴
  2. 真爲噘嘴

我已經設法獲得儘可能這個表達式:

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

然而,這只是對匹配出鱒魚第一個字符串。

我已經想通了,空白字符是這裏不匹配噘嘴的影響因素,但擺脫它匹配的括號之間的一切,太。

什麼是正確的正則表達式呢?

+0

它是括號裏面總是有一個字,沒有空間? – ClasG

+0

嘗試將'out \ s'改爲'out [a-z0-9]',因爲在'out'後面可以有字符 – Rajesh

+0

啊,我太親近了!謝謝你的回答,Rajesh! – Jon

回答

0

假設[...]平衡和轉義,你可以使用負前瞻基於搜索:

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

(?![^\[\]]*\])是負先行斷言,我們沒有]以下的非[和非]前面的字符,從而確保我們在[...]內不匹配out

Javascript代碼來構建你的正則表達式:

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

RegEx Demo

+1

儘管Rajesh在上面給出了一個很好的答案,但我會隨着你的方法去做,因爲它更強大。非常感謝您的幫助,Anubhava。 – Jon

相關問題