Skip to content

在JavaScript中替换字符串的所有出现

String.prototype.replaceAll()

现代的JavaScript引擎有一个内置方法叫做String.prototype.replaceAll()。这个方法可以用来相对轻松地替换一个字符串在另一个字符串中的所有出现。

const str = 'Hello World';

str.replaceAll('o', 'x'); // 'Hellx Wxrld'

使用String.prototype.replaceAll()是推荐的方法,因为它很简单直接。然而,如果你需要支持旧版本的浏览器,可以考虑下面的选项。

String.prototype.replace()

在引入String.prototype.replaceAll()之前,String.prototype.replace()是这种任务的首选方法。它被所有的JavaScript引擎支持,无论是旧的还是新的,并且与String.prototype.replaceAll()非常相似。

虽然这个方法不能替换字符串的所有出现,但它支持正则表达式。知道要替换的字符串后,可以使用全局('g')标志创建一个正则表达式。然后,可以将它传递给String.prototype.replace()来替换字符串的所有出现。唯一的问题是特殊字符需要转义,以便正确匹配。这时可以使用escapeRegExp代码片段来完成这个任务。

const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const replaceAll = (str, subStr, newSubStr) =>
  str.replace(new RegExp(escapeRegExp(subStr), 'g'), newSubStr);

```javascript
const str = 'Hello World';

replaceAll(str, 'o', 'x'); // 'Hellx Wxrld'
const str = 'Hello World';

replaceAll(str, 'o', 'x'); // 'Hellx Wxrld'