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

时间:2017-05-28 12:22:06

标签: regex

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

正则表达式:

!\[[^\]]*\]\((.*)\s"(.*[^"])"?\s*\)

测试(link to live demo):

foo

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

bar

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

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

foo

![](image 2.png)

bar

我应该如何修改正则表达式以使其在两种情况下都有效?

3 个答案:

答案 0 :(得分:3)

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

!\[[^\]]*\]\((?<filename>.*?)(?=\"|\))(?<optionalpart>\".*\")?\)

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

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

!\[[^\]]*\]\((.*?)\s*("(?:.*[^"])")?\s*\)

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

答案 1 :(得分:2)

这是一个完整的正则表达式,用于匹配带有命名捕获组的markdown文件中的Alt文本和图像url:

(?<alt>!\[[^\]]*\])\((?<filename>.*?)(?=\"|\))\)

答案 2 :(得分:1)

先前接受的答案仅用于解释标准图像,但是有可能将图像用作超链接的链接,从而导致嵌套的图像引用,例如:

isPrime

更完整的正则表达式模式如下:

![alt-text](http://example.com/image.png "image title")](http://example.com/some?target)

此模式还为您可能需要的有关图像的所有其他潜在信息提供了命名组,例如“替代文字”或“标题”。