[英]Javascript regex: Find all URLs outside <a> tags - Nested Tags
我已经构建了这个正则表达式代码:
((https?|ftps?):\/\/[^"<\s]+)(?![^<>]*?>|[^<>]*?<\/)
第一组捕获HTML中的所有链接,第二组是否定前瞻,将标记内的任何部分排除为属性,将标记内的任何部分排除为内容。
我希望只排除<a>
标签 - 因此解决方案可能只是修改最后一个术语:
[^<>]*?<\/a>
但是现在如果我有嵌套标签就会出现问题,例如<a>
<b></b>
。
以下是我正在研究的示例: https : //regex101.com/r/lM3hC5/6 (应该是10场比赛)。
消极的前瞻对我来说仍然很棘手。 我认为以下内容应该有效,但事实并非如此:
(?!<a.+?<\/a>)
https://regex101.com/r/hT1cG5/1
这些是帮助我的最后一次讨论:
事实证明,最好的解决方案可能如下:
((https?|ftps?):\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
看起来负面预测只有在以量词而不是字符串开头时才能正常工作。 对于这种情况,实际上我们只能做回溯。
同样,我们只想确保HTML标记内的任何内容都不会被混淆。 然后我们从</a
到第一个"
符号开始做回溯(因为它不是有效的URL符号,但<>
符号与嵌套标签一起出现)。
现在还可以正确找到<a>
标签内的嵌套标签。 当然,代码并不完美,但它应该适用于几乎任何简单的HTML标记。 只是你可能需要小心:
<a>
标签内放置引号; <a>
标签上使用此算法; <a>
标签内的URL在任何双引号之后,否则您可能需要避免使用多个嵌套标签/行。
这是一个非常好的和混乱的例子(不应该找到最后一个匹配,但它是):
https://regex101.com/r/pC0jR7/2
遗憾的是,这个前瞻不起作用: (?!<a.*?<\\/a>)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.