Javascript Regex认为我在筑巢,但我不是

Javascript Regex认为我在筑巢,但我不是,javascript,regex,Javascript,Regex,我编写这个regexp是为了捕获下面的字符串 \!\[(.*?)?\] 下面的所有字符串都应该匹配并返回第一组方括号内的可选字符串 ![] ![caption] ![]() ![caption]() ![caption][] 问题是这个字符串也匹配并返回][因为正则表达式认为它介于第一个[和最后一个]之间 如何修复此问题?只需删除?外部。*?,这是多余的 var myArray = ["![abc]","![caption]", "![def]()", "![caption]()","![c

我编写这个regexp是为了捕获下面的字符串

\!\[(.*?)?\]
下面的所有字符串都应该匹配并返回第一组方括号内的可选字符串

![]
![caption]
![]()
![caption]()
![caption][]
问题是这个字符串也匹配并返回][因为正则表达式认为它介于第一个[和最后一个]之间

如何修复此问题?

只需删除?外部。*?,这是多余的

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

检查正则表达式的工作方式

只需删除多余的?outside.*

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

检查正则表达式的工作方式使用此正则表达式:

\!\[([^\]]*)\]
这意味着它期望最后一个]但使内部的无效。 这将解决您的问题。

使用此正则表达式:

\!\[([^\]]*)\]
这意味着它期望最后一个]但使内部的无效。
这应该可以解决你的问题。

如果你想忽略捕捉这样的东西,我的偏好是这样![[]


我的偏好是,如果你想忽略捕捉这样的东西![[]


你确定正则表达式匹配][?加上最后一个是多余的。*?已经考虑到了“不匹配”。我正在使用scriptular.com,它在结果中显示了这一点。scripular会被破坏吗?这里有一个共享链接。*%3F%3F%5C%5D%7C%7C%7C%7C%7C%7C%7C%5B%5D%22%2C%22!%5B%5D%5D%22%2C%22!%5B%5D%22%2C%22!%5B%5D%5D%22%2C%22!%5D%5D%5D%22%5D%5D%5D%5D%22B%5D%22%2C%22%22%5D对长链接表示担忧,但这正是它产生的。在我看来,它应该匹配,只是不应该捕获][。Debuggex似乎显示它以您期望的方式工作。@JumbalayaWanton链接的语法是[text]http://stackoverflow.com/Are 你确定正则表达式匹配][?加上最后一个是多余的。*?已经考虑到了“不匹配”。我正在使用scriptular.com,它在结果中显示了这一点。scripular会被破坏吗?这里有一个共享链接。*%3F%3F%5C%5D%7C%7C%7C%7C%7C%7C%7C%5B%5D%22%2C%22!%5B%5D%5D%22%2C%22!%5B%5D%22%2C%22!%5B%5D%5D%22%2C%22!%5D%5D%5D%22%5D%5D%5D%5D%22B%5D%22%2C%22%22%5D对长链接表示担忧,但这正是它产生的。在我看来,它应该匹配,只是不应该捕获][。Debuggex似乎显示它以您期望的方式工作。@JumbalayaWanton链接的语法是[text]http://stackoverflow.com/Thank 你。我认为需要?是因为标题是选项。我不确定是否应该问另一个问题,但我希望如果第二组正则表达式中包含某些内容,则正则表达式不匹配。因此![]此处的某些内容将停止匹配或![]此处的某些内容也将停止匹配].1.此外,我刚刚注意到\!\[.*\]在PCRE上按预期工作,但在JS的引擎上不工作。嗯。@thefourtheye不,我的意思是,在PCRE中,\!\[.*\]匹配![]预期但在JS中,它匹配![]。谢谢。我认为需要?是因为标题是可选的。我不确定是否应该再问一个问题,但我希望如果第二组正则表达式中包含某些内容,则正则表达式不匹配。因此![]此处的某些内容将停止匹配,或者![]此处的某些内容也将停止匹配]。+1。此外,我刚刚注意到\!\[.*\]在PCRE上按预期工作,但在JS的engine.Hmmm上不工作。@thefourtheye不,我的意思是,在PCRE中,\!\[.**\]匹配![]预期但在JS中,它匹配![[]。
\!\[([^\[\]]*)\]