Javascript正则表达式在IE中失败,但在Chrome&;边缘

Javascript正则表达式在IE中失败,但在Chrome&;边缘,javascript,regex,Javascript,Regex,我试图用javascript中的正则表达式替换文件名中的非法字符,但在IE 11中,它总是以“正则表达式中的语法错误”而失败。同样的代码在Chrome和Edge中也能很好地工作 String.prototype.replaceAll = function (search, replacement) { var target = this; return target.replace(search, replacement); }; var filename = 'test+

我试图用javascript中的正则表达式替换文件名中的非法字符,但在IE 11中,它总是以“正则表达式中的语法错误”而失败。同样的代码在Chrome和Edge中也能很好地工作

String.prototype.replaceAll = function (search, replacement) {
     var target = this;
     return target.replace(search, replacement);
};

var filename = 'test+&+this+again.2016.txt';

filename = filename.replaceAll(new RegExp(/[^a-zA-Z0-9_\-&.]+/, 'g'), '_');
期望输出为

filename = 'test_&_this_again.2016.txt';
任何帮助都将不胜感激


谢谢

双转义
\
,字符串表示法应该可以做到这一点:

filename = filename.replaceAll(new RegExp('[^a-zA-Z0-9_\\-&.]+', 'g'), '_');

关键是,正如您所看到的,并非所有浏览器都支持接受regex literal对象的
RegExp
构造函数。使用如下常见代码:

filename='test+&+this+reach.2016.txt';
文件名=文件名。替换(/[^a-zA-Z0-9&.-]+/g,'''.''');

document.body.innerHTML=文件名附带问题:
replaceAll
函数的用途是什么,因为它只是调用标准的
replace
one?FWIW:
/[^a-zA-Z0-9\-&.]+/
/[^\w-&.]+//code>一样,我希望你不要把这个
.replaceAll
泄露到生产代码中:-这些实际上都是单引号,但是是的,我打算提出同样的建议。将regex文本传递给RegExp构造函数在技术上总是不正确的;也许IE 11是唯一一个执行该规则的。如果放在字符类的末尾,就没有必要转义连字符。我解决了它,将模式从
gs
改为
g