JavaScript替换字符串中所有给定子字符串

原文:Replace All Instances of a String in JavaScript

学习如何替换JavaScript字符串中所有给定子字符串。

String#replace()默认只替换第一个子字符串。要替换所有,需要传入一个带有/g标识的正则表达式,如下:

1
2
3
4
5
6
7
const str = 'A penny saved is a penny earned';

// "A dollar saved is a dollar earned"
str.replace(/penny/g, 'dollar');

// "A dollar saved is a penny earned" - 默认只替换第一个.
str.replace('penny', 'dollar');

注意,JavaScript的字符串是不可变的,字符串使用replace(),并不会修改原始的字符串。

替换变量名

String#replace()函数的第二个参数,有几个特殊的字符组合,称为“替换变量名”。替换变量名可以用于这样的场景:把所有正则表达式匹配的子字符串,替换为包含匹配内容的字符串。

例如,在所有数字前加一个#。使用$&替换变量名,就可以在匹配子字符串前插入#了。

1
2
3
4
const str = 'My favorite team is 1, everyone else is 2';

// "My favorite team is #1, everyone else is #2"
str.replace(/\d+/g, '#$&');

译者补充

替换所有子字符串可以使用ES6新增的String#replaceAll()