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

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


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

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


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

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


我该如何解决?

最佳答案

只需删除?之外的(.*?),那是多余的。

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


输出量

abc
caption
def
caption
caption


检查RegEx的工作方式here

关于javascript - 正则表达式认为我在嵌套,但我不是,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20920296/

10-12 05:38