繁体   English   中英

为什么此正则表达式要花这么长时间执行?

[英]Why does this regex take so long to execute?

我创建了regex ,该regex应该将文本移到相邻的<span>标记中。

const fix = (string) => string.replace(/([\S]+)*<span([^<]+)*>(.*?)<\/span>([\S]+)*/g, "<span$2>$1$3$4</span>")

fix('<p>Given <span class="label">Butter</span>&#39;s game, the tree counts as more than one input.</p>')
// Results in:
'<p>Given <span class="label">Butter&#39;s</span> game, the tree counts as more than one input.</p>'

但是,如果将没有文本触摸<span>标记的字符串传递给它,则需要花费几秒钟来运行。

我正在ChromeElectron上对此进行测试。

([\\S]+)*([^<]+)*是在没有</span>时导致灾难性回溯的罪魁祸首。 您需要将正则表达式修改为

([\S]*)<span([^<]*)>(.*?)<\/span>([\S]*)

它可以工作,但效率仍然不

为什么对\\S使用字符类? 以上减少到

(\S*)<span([^<]*)>(.*?)<\/span>(\S*)

如果仅关注span内容,请改用此方法

<span([^<]*)>(.*?)<\/span>

在这里检查<=(请参阅减少的步骤)

注意 :如果有工具可以更轻松地完成,最后不要使用正则表达式解析HTML。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM