我写了这个正则表达式来捕获下面的字符串。
\!\[(.*?)?\]
下面的所有字符串都应匹配并返回第一组方括号内的可选字符串。
![]
![caption]
![]()
![caption]()
![caption][]
问题是这个字符串也匹配并返回][
,因为正则表达式认为它在第一个[
和最后一个]
之间。
![][] // Should not match, but does and returns "]["
我该如何解决这个问题?
答案 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)
如果您想忽略捕捉![[]]
\!\[([^\[\]]*)\]