非贪婪向后JavaScript正则表达式?

时间:2016-08-30 03:11:31

标签: javascript regex

我有以下JavaScript正则表达式:

focus: function (event, ui) {
        if($("#streetid")) $("#streetid").val(ui.item.label); //this was my hidden variable
    }   
},

适用于以下字符串:

/\!\[(.*?)\]\((.+?) \"(.*?)\"\)/g

regex101 link

我遇到的问题是搜索字符串中应该有4个不同的降价标记,其中两个应该匹配,但返回的两个匹配包括降价标记。

这似乎归结为正则表达式解析器循环,抓住第一个可能的匹配起点并继续搜索匹配的剩余部分,而不考虑匹配中有一个后来可能的起点。我认为我可以使用非贪婪的![test](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png)<br />![test](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "test")<br />![test](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png)<br />![test](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "test") 修饰符来解决这个问题,但似乎并非如此。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

其中两个Markdown链接没有说明,但正则表达式中的说明不可选。

/\!\[(.*?)\]\((.+?)(?: \"(.*?)\")?\)/g

最好排除链接地址部分中的某些字符,以避免出现意外的长匹配(如果您需要健壮性,则应使用现有的Markdown解析器)。

/\!\[(.*?)\]\(([^)]+?)(?: \"(.*?)\")?\)/g