为什么这个正则表达式需要这么长时间才能执行
Why does this regex take so long to execute?
我创建了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>'s game, the tree counts as more than one input.</p>')
// Results in:
'<p>Given <span class="label">Butter's</span> game, the tree counts as more than one input.</p>'
但是,如果我向它传递一个字符串,其中没有文本接触<span>
标签,则需要几秒钟才能运行。
我正在Chrome
和Electron
上对此进行测试.
(['S]+)*
和([^<]+)*
是导致灾难性回溯的罪魁祸首,当没有</span>
时。您需要将正则表达式修改为
(['S]*)<span([^<]*)>(.*?)<'/span>(['S]*)
它会起作用,但仍然没有效率。
为什么使用字符类进行'S
?以上简化为
('S*)<span([^<]*)>(.*?)<'/span>('S*)
如果您只关心span
的内容,请改用它
<span([^<]*)>(.*?)<'/span>
在这里检查 <= (请参阅步骤数的减少)
注意:最后不要用正则表达式解析 HTML,如果有工具可以更容易地做到这一点
相关文章:
- 为什么我的上下文选择器和.buttonset()在ie中花费了这么长时间
- 谷歌地图需要很长时间才能在ie11中渲染
- 有没有一种方法可以检查javascript以毫秒为单位执行一个函数需要多长时间
- 我一直收到的控制台警告是什么?推迟长时间运行的计时器任务以提高滚动的流畅性
- 为什么这个代码不起作用?我花了很长时间试图弄清楚这一点
- 如何在长时间执行JavaScript期间显示微调器
- 长时间轮询:每个浏览器中的通知
- 完整日历:如何支持一次点击和不长时间点击
- 如何使用 javascript 停止对 asp.net 进行正在进行的回发(长时间运行的执行)
- 为什么这个 AJAX 调用需要这么长时间
- 为什么这个正则表达式需要这么长时间才能执行
- 如何修复长时间运行的脚本
- Node.js中的垃圾收集作用域-变量将保持设置状态多长时间
- javascript秒表限制最长时间
- 长时间运行的脚本IE与Chrome/Firefox
- 有没有一种方法可以在长时间运行的JavaScript操作之前强制回流
- JavaScript 脚本执行时间太长.获取脚本需要太长时间提示
- 尽管脚本只运行了40秒(并且在此之前运行了很长时间),但在GAS中超过了最大执行时间错误
- 为什么IE9要花这么长时间来执行一些JQuery ?
- 在长时间执行过程之前和之后使用Jquery更改元素css