js的replace()方法的用法,以及replace替换含有 '$1'的string字符串的解决方案

replace替换对应的字符串  stringObject.replace(regexp/substr,replacement)

replacement 可以是字符串,也可以是函数。

1、当replacement是字符串的时候

let str = 'I am me, I not me';
str = str.replace('I','he');// 部分替换
console.log(str); // he am me, I not me
str = str.replace(/me/g,'he');// /g 是全局替换
console.log(str); // he am he, I not he

2、当需要替换的字符串是正则表达式的时候

let str = '10.00,22,20.11';
str = str.replace(/\d+(\.\d+)?/,'$10.00'); 
//  /\d+(\.\d+)?/  这个正则表达式是表示带小数的数字,例如:10.00
//中文货币符号替换成美元货币符号
console.log(str);  //  .000.00,22,20.11

这个时候发现,replace把10.00替换成$10.00的时候,却变成了 .000.00

原因是因为 $1 是切割正则表达式的第一个括号 (\.\d+),所以就分成了两步

第一步:(/\.\d+/)  =  '$1'      ===>     $1 =  '.00'

第二步:'$10.00' =  '$1' + '0.00'    ===>  str =  .000.00

解决这个问题就可以用下面这个当replacement是函数的方法,返回 function 的时候就没有 $1 对正则表达式的括号进行切割了。

3、当replacement是函数的时候

let str = '10.00,22,20.11';
str = str.replace(/\d+(\.\d+)?/,function(){
    return '$10.00';
}); 
console.log(str);  //  $10.00,22,20.11