Javascript Node.js dom解析器tagRegExp regex匹配挂起:灾难性回溯?

Javascript Node.js dom解析器tagRegExp regex匹配挂起:灾难性回溯?,javascript,node.js,regex,dom,Javascript,Node.js,Regex,Dom,我正在使用node.js dom解析器,它(唯一地)使用正则表达式从dom中提取标记 您可以在以下位置找到dom解析器: 有时,某些网页(例如)的HTML会导致node.js应用程序挂起。我使用普通的匹配脚本进行了测试,发现tagRegExp导致脚本挂起(可能是因为灾难性的回溯?) 实际上,我正在使用它查找链接rel=“canonical”和a href=“xyz”(如果有,ecosia没有canonical) tagRegExp: /()|([^问题是由[\s]*?模式和低效的(x |[^x

我正在使用node.js dom解析器,它(唯一地)使用正则表达式从dom中提取标记

您可以在以下位置找到dom解析器:

有时,某些网页(例如)的HTML会导致node.js应用程序挂起。我使用普通的匹配脚本进行了测试,发现tagRegExp导致脚本挂起(可能是因为灾难性的回溯?)

实际上,我正在使用它查找链接rel=“canonical”和a href=“xyz”(如果有,ecosia没有canonical)

tagRegExp:


/()|([^问题是由
[\s]*?
模式和低效的
(x |[^x])*
类模式引起的

你可以用

/(<\/?[a-z][a-z0-9]*(?::[a-z][a-z0-9]*)?\s*(?:\s+[a-z0-9-_]+=(?:'[^']*'|"[^"]*"))*\s*\/?>)|[^<]*(?:<(?![a-z\/])[^<]*)*/gi

/(是的,使用
/(非常感谢,Wiktor。这解决了问题!对不起,我的错:我不知道你要发布答案。再次感谢!
/(<\/?[a-z][a-z0-9]*(?::[a-z][a-z0-9]*)?\s*(?:\s+[a-z0-9-_]+=(?:'[^']*'|"[^"]*"))*\s*\/?>)|[^<]*(?:<(?![a-z\/])[^<]*)*/gi