2011-11-02 230 views
0

我不能得到這個工作。
我試圖從[A](B)中匹配A和B,但只應在匹配項沒有以!開頭的情況下進行匹配。比賽[A](B)但不是![A](B)

我已經到目前爲止。 /\[([^\]]+)]\(([^)]+)\)/

它匹配A和B,但如果我加[^\!]它不會匹配任何東西。

/[^\!]\[([^\]]+)]\(([^)]+)\)/

![A](B)可以在一個較大的字符串的任何地方。

任何想法爲什麼這不起作用?

+0

什麼叫「它不會匹配任何」呢? [A](B)不再與你的新模式匹配/ [^ \!] \ [([^ \]] +)] \(([^)] +)\)/? – PierrOz

+0

/[^ \!] \ [([^ \]] +)] \(([^)] +)\)/不會與[[A](B)]匹配。 – Oleander

+0

什麼正則表達式風格/編程語言? –

回答

1

這TextPad工作對我來說(這就是我對此刻正則表達式,你可能不得不修改逃逸。):

\(^\|[^\!]\)\[[^]]+\]([^)]+) 

\(^\|[^\!]\)匹配行的開頭或!以外的字符。

1

如果您使用的是支持回顧後當時正則表達式以下應該工作

(?<!!)\[A\]\(B\) 

,第一組是指沒有一個!背後

+0

Lookbehind不受支持,我正在使用JavaScript。 – Oleander

1

試試這個:([^!]|^)(\[A\]\(B\))

+0

工作。謝謝! – Oleander

+0

我遇到了一些問題('/([^!] | ^)\ [([^ \]] +)] \(([^)] +)\)/ gm')。它匹配'[A](B)','[A](B)[C](D)',但不匹配[A](B)[C](D)'。任何想法爲什麼? – Oleander

+0

符合您的所有樣本 – Lachezar

0

既然你不能使用向後看斷言,可使用兩種不同的正則表達式與邏輯運算符:

/\[([^\]]+)]\(([^)]+)\)/ && !(/!\[([^\]]+)]\(([^)]+)\)/) 
相關問題