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

时间:2018-06-21 22:40:37

标签: javascript regex microsoft-edge

我找到了一种使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执行时,它将进入非响应状态。什么都无法点击,最终edge询问您是否要关闭页面,因为它没有响应。在开发者控制台中执行时,它不会显示返回值,并且永远不会执行任何其他语句。您可以继续输入,但是什么也没发生。

1 个答案:

答案 0 :(得分:3)

如果我不带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上进行报告。