我的 JavaScript 代码中有这个字符串:
"Test abc test test abc test test test abc test test abc"
正在做:
str = str.replace('abc', '');
似乎只删除了abc上面字符串中第一次出现的。
abc
我怎样才能替换它的所有出现?
现代浏览器支持ECMAScript 2021 语言规范定义的String.replaceAll()方法。
String.replaceAll()
对于旧版/旧版浏览器:
function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string } function replaceAll(str, find, replace) { return str.replace(new RegExp(escapeRegExp(find), 'g'), replace); }
以下是这个答案的演变过程:
str = str.replace(/abc/g, '');
回应评论“如果‘abc’作为变量传递会怎样?”:
var find = 'abc'; var re = new RegExp(find, 'g'); str = str.replace(re, '');
您可以进一步简化它:
function replaceAll(str, find, replace) { return str.replace(new RegExp(find, 'g'), replace); }
注意:正则表达式包含特殊(元)字符,因此在find上面的函数中盲目传递参数而不对其进行预处理以转义这些字符是危险的。这在Mozilla 开发人员网络的JavaScript 正则表达式指南中有所介绍,其中提供了以下实用程序功能(自最初编写此答案以来已更改至少两次,因此请务必检查 MDN 站点以获取潜在更新):
find
function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string }
因此,为了使上述replaceAll()功能更安全,如果您还包含以下内容,则可以将其修改为以下内容escapeRegExp:
replaceAll()
escapeRegExp
function replaceAll(str, find, replace) { return str.replace(new RegExp(escapeRegExp(find), 'g'), replace); }