正则表达式认为我在筑巢,但我不是

时间:2014-01-04 11:20:23

标签: javascript regex

我写了这个正则表达式来捕获下面的字符串。

\!\[(.*?)?\]

下面的所有字符串都应匹配并返回第一组方括号内的可选字符串。

![]
![caption]
![]()
![caption]()
![caption][]

问题是这个字符串也匹配并返回][,因为正则表达式认为它在第一个[和最后一个]之间。

![][] // Should not match, but does and returns "]["

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

只需移除?以外的(.*?),这是多余的。

var myArray = ["![abc]","![caption]", "![def]()", "![caption]()","![caption][]"];
myArray.forEach(function(current) {
    console.log(/!\[(.*?)\]/.exec(current)[1]);
});

<强>输出

abc
caption
def
caption
caption

检查RegEx如何运作here

答案 1 :(得分:1)

使用此正则表达式:

\!\[([^\]]*)\]

这意味着它期望“最后”]但是使内部的无效。 这应该可以解决您的问题。

答案 2 :(得分:1)

如果您想忽略捕捉![[]]

之类的内容,我的偏好就是这个
\!\[([^\[\]]*)\]