2013-10-16 90 views
11

好的正則表達式的問題,如何提取一個不在兩個字符之間的字符,在這種情況下括號。正則表達式,提取字符串不在兩個括號之間

我有一個字符串,如: word1 | {word2 | word3} |字4

我只想得到第一個和最後一個'pipe',而不是括號內的第二個。我嘗試過無數克拉負面和負面分組的嘗試,似乎無法使其發揮作用。

基本上我在一個JavaScript拆分函數中使用這個正則表達式來將它拆分成一個包含「word1」,「{word2 | word3}」,「word4」的數組。

任何援助將不勝感激!

+0

什麼'酒吧'?這不是你的例子。 –

+0

你使用什麼語言或工具?你能告訴我們一些你已經嘗試過的嗎? –

+0

@CarlNorum他的意思是'word1',它是**垂直條**'|':)之前的 –

回答

17

refiddle.com設定爲JavaScript,請嘗試使用這種模式

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

與本文

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

這應該與所有未裏面的管道符號{}。

+0

感謝潛水員,這個伎倆! –

12

取決於你使用的語言/實行,但是...

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

該管道是後跟一個}除了一個{至上的情況相匹配。


(?! ...)稱爲負前向斷言

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

以上只匹配一個管道將後跟一個}沒有遇到{第一:如果我們開始與積極前向斷言這是比較容易理解。如果通過將=替換爲!來抵消該情況,則匹配現在僅成功如果沒有辦法對於正確情況爲真(也稱爲補碼)。

+0

爲什麼不直接在這裏看看? – hwnd

+2

@hwnd - 嗯,也許這是可能的,但我沒有看到一種方式。你會發布你在想什麼嗎?我很好奇! –

+2

感謝您的解釋。所以很少有這些解釋。 –

相關問題