2011-11-02 192 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

既然你不能使用向后看断言,可使用两种不同的正则表达式与逻辑运算符:

/\[([^\]]+)]\(([^)]+)\)/ && !(/!\[([^\]]+)]\(([^)]+)\)/) 
相关问题