1

感谢 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'>不会匹配。

感谢您的帮助,我知道你们中的一些人有学者级的正则表达式才能,我只是永远做不到。

4

1 回答 1

1

对于简单的方法,只需在前面

(?<!img.*)

到你的正则表达式的开头。它会像它已经匹配的那样匹配,但如果它img出现在它之前的某个地方就会拒绝它。所以,整个正则表达式:

(?<!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它在上线之前的位置,我可能会建议使用正则表达式以外的工具。

于 2013-05-03T16:04:01.577 回答