【发布时间】:2016-06-03 21:15:38
【问题描述】:
我已经构建了这个正则表达式代码:
((https?|ftps?):\/\/[^"<\s]+)(?![^<>]*?>|[^<>]*?<\/)
第一组捕获 HTML 中的所有链接,第二组是负前瞻,将标签内的任何部分作为属性排除,将标签内的任何部分作为内容排除。
我希望只排除 <a> 标记 - 所以解决方案可能是将最后一个术语修改为:
[^<>]*?<\/a>
但是现在如果我有嵌套标签就会出现问题,例如<b></b>在<a>中。
这是我正在处理的示例:https://regex101.com/r/lM3hC5/6(应该是 10 个匹配项)。
负前瞻对我来说仍然很棘手。我认为以下应该有效,但事实并非如此:
(?!<a.+?<\/a>)
https://regex101.com/r/hT1cG5/1
这些是对我有帮助的最后一次讨论:
【问题讨论】:
-
这个问题还不够严重,不能停止依赖正则表达式从 HTML 中提取文本吗?使用 DOM 解析器。
-
@WiktorStribiżew 你到底是什么意思 DOM 解析器?像这样的东西? simplehtmldom.sourceforge.net/manual.htm
-
我只是想知道这是否可能,因为为此目的,我的代码使用正则表达式非常简洁。
-
@user2943191 我在某处使用正则表达式阅读应该是最后一个选项..
-
这是一个可能的DOM based solution。
标签: javascript html regex hyperlink nested