这个问题是以下帖子的后续内容: Javascript正则表达式:查找<a>标签之外的所有网址 - 嵌套标签
我发现代码:
\b((https?|ftps?):\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
Run Code Online (Sandbox Code Playgroud)
相比单独执行它是极其低效的http和ftp部分是这样的:
\b(https?:\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
Run Code Online (Sandbox Code Playgroud)
和
\b(ftps?:\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
Run Code Online (Sandbox Code Playgroud)
以下是regex101.com的示例:
但是,在我的一个HTML页面中,这些代码比较为85628步骤与7258 + 795步骤,这非常疯狂.
据我所知,使用(x | y)模式可以减少执行长度,但这可能是因为一个奇怪的原因.
任何帮助,将不胜感激.
我已经构建了这个正则表达式代码:
((https?|ftps?):\/\/[^"<\s]+)(?![^<>]*?>|[^<>]*?<\/)
Run Code Online (Sandbox Code Playgroud)
第一组捕获 HTML 中的所有链接,第二组是否定前瞻,以排除标记内的任何部分作为属性以及标记内的任何部分作为内容。
我希望只<a>排除标签 - 因此解决方案可能是仅将最后一项修改为:
[^<>]*?<\/a>
Run Code Online (Sandbox Code Playgroud)
但现在如果我有嵌套标签,例如<b></b>在<a>.
这是我正在处理的示例:https://regex101.com/r/lM3hC5/6(应该是 10 个匹配项)。
负向预测对我来说仍然很棘手。我认为以下内容应该有效,但事实并非如此:
(?!<a.+?<\/a>)
Run Code Online (Sandbox Code Playgroud)
https://regex101.com/r/hT1cG5/1
这些是对我有帮助的最后讨论: