Kla*_*nis 3 html javascript regex nested hyperlink
我已经构建了这个正则表达式代码:
((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
这些是对我有帮助的最后讨论:
事实证明,最好的解决方案可能如下:
((https?|ftps?):\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
Run Code Online (Sandbox Code Playgroud)
看起来,只有当负前视以量词而不是字符串开头时,它才能正常工作。对于这种情况,实际上我们只能进行回溯。
再次强调,我们只是想确保 HTML 标签内的属性不会被弄乱。</a然后我们从第一个符号开始回溯"(因为它不是有效的 URL 符号,但<>符号带有嵌套标签)。
现在,标签内的嵌套标签也<a>可以正确找到。当然,该代码并不完美,但它应该适用于几乎所有简单的 HTML 标记。只是您可能需要小心一点:
<a>;<a>没有任何属性(占位符)的标签上使用此算法;<a>位于任何双引号之后。
这是一个非常好的但混乱的示例(不应该找到最后一个匹配项,但它确实找到了):
https://regex101.com/r/pC0jR7/2
遗憾的是,这种前瞻不起作用:(?!<a.*?<\/a>)
| 归档时间: |
|
| 查看次数: |
2297 次 |
| 最近记录: |