替换 JavaScript 中所有匹配的字符串

要替换所有出现的字符串,请使用 replace() 方法,将带有 g(全局搜索)标志的正则表达式传递给它。 例如,str.replace(/old/g, 'new') 返回一个新字符串,其中所有出现的旧字符串都替换为新字符串。

const str = 'old old world';

const replacedAll = str.replace(/old/g, 'new');
console.log(replacedAll); // 👉️ new new world

我们将以下 2 个参数传递给 String.replace 方法:

  1. 要匹配的正则表达式。 请注意,我们使用 g (全局)标志来指定我们要匹配所有出现而不仅仅是第一个
  2. 替换字符串

如果需要以不区分大小写的方式匹配子字符串,请在 g 标志之后添加 i 标志。

const str = 'old OLD world';
const replacedAll = str.replace(/old/gi, 'new');
console.log(replacedAll); // 👉️ new new world

i 标志启用不区分大小写的搜索。 有关正则表达式标志的完整列表,请查看我们的正则表达式教程。

replace 方法不会更改原始字符串,而是返回一个替换了匹配项的新字符串。 字符串在 JavaScript 中是不可变的。

另一种方法是使用更新的 replaceAll 方法。

要替换所有出现的字符串,请调用 replaceAll() 方法,将要替换的字符串和替换字符串作为参数传递给它。 例如,str.replaceAll('old', 'new') 返回一个新字符串,其中所有出现的旧字符串都替换为新字符串。

// Not Supported in IE 6-11
const str = 'old old world';

const replacedAll = str.replaceAll('old', 'new');
console.log(replacedAll); // 👉️ new new world

我们传递给 String.replaceAll 方法的 2 个参数是:

  1. 要替换的字符串
  2. 替换字符串

Internet Explorer 版本 6-11 不支持 replaceAll 方法。 如果你必须支持这个浏览器,你可以为该方法添加一个 polyfill,使用 babel 将你的代码编译为旧版本的 JavaScript,或者简单地使用 replace 方法。

如果我们必须替换所有出现的不区分大小写的字符串,我们可以将正则表达式传递给 replaceAll 方法并像我们使用 replace 方法一样使用它。

const str = 'old old world';

const replacedAll = str.replaceAll(/old/gi, 'new');
console.log(replacedAll); // 👉️ new new world

在这种情况下没有充分的理由使用 replaceAll over replace。

它采用与 replace 方法完全相同的参数,但支持它的浏览器较少。

任何时候将正则表达式传递给 replaceAll 方法时,都必须设置 g(全局)标志以匹配所有出现的地方,否则会抛出 TypeError