javascript - Microsoft Edge 浏览器在正则表达式替换时使 JS 引擎崩溃

标签 javascript regex microsoft-edge

我找到了一种神秘地使边缘 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/

相关文章:

php - 正则表达式:一起删除非字母数字字符、多个空格和 trim()

javascript - document.querySelectorAll 在 IE、Edge 和 Safari 中的兼容性

javascript - nuxt.js Vuex Vuejs 无法读取未定义的属性 'getters'

javascript - 使用 JavaScript 数组中的数据创建 HTML 表格的最快方法是什么?

javascript - 你如何获得裁判的姓名?

javascript - 正则表达式查找大括号中的内容

regex - 如何检查字符串是否包含 shell 中正则表达式模式中的字符?

javascript - 组条件的正则表达式

html - Windows 移动 10 : white text in option tags are invisible

virtual-machine - 安装新版 Microsoft Edge 后访问 Microsoft Edge Legacy