正则表达式解析 Markdown 中的图片链接

joh*_* j. 7 regex

我正在尝试创建正则表达式来解析降价链接。

正则表达式:

!\[[^\]]*\]\((.*)\s"(.*[^"])"?\s*\)
Run Code Online (Sandbox Code Playgroud)

测试(链接到现场演示):

foo

![](image 2.png "hello world")

bar
Run Code Online (Sandbox Code Playgroud)

第 1 组将是image 2.png,第 2 组将是hello world

当我尝试解析没有标题的链接时出现问题:

foo

![](image 2.png)

bar
Run Code Online (Sandbox Code Playgroud)

我应该如何修改正则表达式以使其在两种情况下都能正常工作?

Sco*_*ver 6

您必须将第二组设为可选,因为它并不总是存在。此外,您可以使用命名组获得更好的可读性,可能是这样的:

!\[[^\]]*\]\((?<filename>.*?)(?=\"|\))(?<optionalpart>\".*\")?\)
Run Code Online (Sandbox Code Playgroud)

https://regex101.com/r/cSbfvF/3/

或者,您修复的原始正则表达式将是:

!\[[^\]]*\]\((.*?)\s*("(?:.*[^"])")?\s*\)
Run Code Online (Sandbox Code Playgroud)

https://regex101.com/r/u2DwY2/2/