JavaScript的String.replace()函数遇到$符合的时候不好使?
2022-03-25大约3分钟
在JavaScript里编程的时候,字符串替换最常用的方式就是用String.replace()
了。
比如:
let str = "{0}'s car";
console.log(str.replace('{0}', 'Tom')); // 输出:Tom's car
但是,如果上面的代码替换成这样,结果会是怎样呢?
let str = "{0}'s car";
console.log(str.replace('{0}', '$&Tom')); // {0}Tom's car
是不是很出乎意料?原始字符串里面的{0}
竟然没有被替换掉,$&
也消失了。
是不是JavaScript的bug? 其实不是的,原因是$
符号在字符串替换的时候是一个特殊字符,所以在替换字符串的时候,如果有$符号,需要转义一下。
$
符号的转义,要用$
符号。即一个$
要变成$$
,是不是很绕?看例子:
let str = "{0}'s car";
console.log(str.replace('{0}', '$$&Tom')); // $&Tom's car
在上面的例子里,我们把替换的字符串里面换成了$$
,这时候替换的结果里面出现了$&
,证明好使了。
那么,我们再实现一个可以复用的replace函数:
function replace(searchValue, replaceValue) {
if (replaceValue.includes('$')) {
// 把replaceValue里的每个'$'变成'$$'
replaceValue = replaceValue.replaceAll('$', '$$$$');
}
return searchValue.replace('{0}', replaceValue);
};
console.log(replace("{0}'s car", '$&Tom')); // $&Tom's car
这样就可以了。