非贪婪向后JavaScript正则表达式

Non-Greedy Backwards JavaScript Regex?

本文关键字:JavaScript 正则表达式 贪婪      更新时间:2023-09-26

我有以下JavaScript正则表达式:

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

应用于如下字符串:

![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")

regex101联系

我遇到的问题是,在搜索字符串中应该有4个不同的markdown标签,其中两个应该匹配,但是两个匹配回来包括markdown标签。

这似乎归结为regex解析器循环,抓住第一个可能的匹配起始点,并继续搜索匹配的其余部分,而不考虑在匹配中存在稍后可能的起始点。我认为我可以用非贪婪的?修饰符来解决这个问题,但情况似乎并非如此。

有什么建议吗?

其中两个Markdown链接没有描述,但是描述在正则表达式中不是可选的。

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

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

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