感谢 dfowler出色的 Jabbr 项目,我正在借用代码来嵌入来自用户帖子的链接内容。该代码来自此处,并使用正则表达式提取 URL 以进行额外处理和嵌入。
就我而言,在尝试嵌入之前,我首先通过降价处理器运行用户帖子。如果用户正确格式化 markdown,markdown 处理器 (MarkdownDeep) 会将任何给定的图像 markdown 转换为有效的 HTML img 标签。这很好用,但是,使用嵌入式内容提供程序会使图像出现两次,因为它从降价转换中有效显示,然后也被嵌入。
所以,我相信我的问题的解决方案在于当找到的 URL 已经包含在有效的 img 标记中时,将正则表达式更改为不匹配。
到目前为止,为了便于回答正则表达式是:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'"".,<>?«»“”‘’]))
我想我想在这个答案中使用负前瞻来排除img,但我在正则表达式语法方面太差了,无法自己实现它。
注意:如果图像仅出现在文本中,我希望它仍然匹配图像。所以http://www.example.com/sites/default/files/DellComputer.jpg
会匹配或在超链接中<a href='http://www.example.com/sites/default/files/DellComputer.jpg'>
会匹配但<img src='http://www.example.com/sites/default/files/DellComputer.jpg'>
不会匹配。
感谢您的帮助,我知道你们中的一些人有学者级的正则表达式才能,我只是永远做不到。