如何替换 JavaScript 中所有出现的字符串?

新手上路,请多包涵

给定一个字符串:

s = "Test abc test test abc test test test abc test test abc";

这似乎只删除了上面字符串中第一次出现的 abc

s = s.replace('abc', '');

如何替换 所有 出现的它?

原文由 Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 606
2 个回答

更新: 在大多数流行浏览器的最新版本中,您可以使用 replaceAll

如此处所示:

 let result = "1 abc 2 abc 3".replaceAll("abc", "xyz");
 // `result` is "1 xyz 2 xyz 3"

但是首先检查 我可以使用 或其他兼容性表,以确保您的目标浏览器首先添加了对它的支持。


对于 Node 以及与旧版/非当前浏览器的兼容性:

注意:不要在性能关键代码中使用以下解决方案。

作为简单文字字符串的正则表达式的替代方法,您可以使用

str = "Test abc test test abc test...".split("abc").join("");

一般模式是

str.split(search).join(replacement)

在某些情况下,这曾经比使用 replaceAll 和正则表达式更快,但在现代浏览器中似乎不再如此。

基准测试: https ://jsben.ch/TZYzj

结论:

如果您有性能关键用例(例如处理数百个字符串),请使用 Regexp 方法。但是对于大多数典型的用例,不必担心特殊字符是非常值得的。

原文由 Matthew Crumley 发布,翻译遵循 CC BY-SA 4.0 许可协议

截至 2020 年 8 月: 现代浏览器支持 ECMAScript 2021 语言规范定义的 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, '');

为了回应 Click Upvote 的评论,您可以进一步简化它:

 function replaceAll(str, find, replace) {
  return str.replace(new RegExp(find, 'g'), replace);
}

注意: 正则表达式包含特殊(元)字符,因此在上面的 find 函数中盲目传递参数而不对其进行预处理以转义这些字符是危险的。 Mozilla Developer NetworkJavaScript 正则表达式指南 对此进行了介绍,其中提供了以下实用函数(自最初编写此答案以来至少更改了两次,因此请务必检查 MDN 站点以获取潜在更新):

 function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}

因此,为了使上面的 replaceAll() 函数更安全,如果您还包括 escapeRegExp ,则可以将其修改为以下内容:

 function replaceAll(str, find, replace) {
  return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}

原文由 Sean Bright 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题