Javascript正则表达式:查找所有URL优化

Javascript正则表达式:查找所有URL优化,javascript,html,regex,hyperlink,multipart-alternative,Javascript,Html,Regex,Hyperlink,Multipart Alternative,此问题是以下职位的后续问题: 我发现代码: \b((https?|ftps?):\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a) 及 \b(ftps?:\/\/[^”|[^”]*?如果您要查找文档中的所有链接,而不是此解决方案。 它返回一个数组 document.anchors看来你是这场灾难的受害者 这个正则表达式只需3492个步骤: \b(?>(https?|ftps?):\/\/[^"<\s]+)(?![^<>

此问题是以下职位的后续问题:

我发现代码:

\b((https?|ftps?):\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)


\b(ftps?:\/\/[^”|[^”]*?如果您要查找文档中的所有链接,而不是此解决方案。
它返回一个数组


document.anchors
看来你是这场灾难的受害者

这个正则表达式只需3492个步骤:

\b(?>(https?|ftps?):\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)

正如前一篇文章所解释的,我想找到所有在锚点()之外的URL标签。非常感谢!我知道我在调试器的帮助下也发现了灾难性的回溯,但无法解决它。诀窍是找出正则表达式的哪些部分可以像这样变成原子。您的示例很简单,但许多正则表达式需要大量回溯才能正常工作。有时可以重新定义稍微调整一下正则表达式,使其更符合此技巧。示例数据中的最后一个链接如何?它是wihtin
。更好的方法是用于匹配您不想要的内容,但捕获您需要的内容:。顺便说一句,Javascript正则表达式不支持原子组。
\b(ftps?:\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
\b(?>(https?|ftps?):\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
\b(?>ht|f)tps?:\/\/(?>[^"<\s]+)(?![^<>]+>|[^"]*?<\/a)