我找到了一种神秘地使边缘 JS 解释器崩溃的方法,但我不知道它为什么坏了。它在 Firefox 和 Chrome 中运行良好,但它完全破坏了 Edge。
var foo = "Change or cancel my flight booking";
var match = "a";
foo.replace(new RegExp(match + "(?!([^<]+)?>)", 'gu'), '<span class="text-highlight">${match}</span>');
问题似乎出在正则表达式本身,因为如果我将它换成空字符串,一切都会顺利进行。
真的不确定尝试匹配正则表达式会如何破坏浏览器:(
编辑:为清楚起见,当在浏览器中通过 html 执行时,它会进入无响应状态。无法单击任何内容,最终边缘会询问您是否要关闭该页面,因为它没有响应。在开发控制台中执行时,它不会打印返回值,并且永远不会执行任何进一步的语句。您可以继续输入,但没有任何反应。
最佳答案
如果我在没有 u
Unicode 标志的情况下运行正则表达式,Edge(或任何其他主要浏览器)不会发生超时或崩溃:
var foo = "Change or cancel my flight booking";
var match = "a";
console.log(foo.replace(new RegExp(match + "(?!([^<]+)?>)", 'g'), '<span class="text-highlight">${match}</span>'));
正则表达式的 ES2015 u
标志实际上与许多 bugs 相关联在不同的浏览器上,例如HTML 模式属性是 broken in Edge .
所以,这个问题似乎是一个与 u
标志相关的类似但不同的错误,应该在 Microsoft Edge issue tracker 上报告.
关于javascript - Microsoft Edge 浏览器在正则表达式替换时使 JS 引擎崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50978355/