1. 作用:

1. 用指定字符串替换匹配的字符串

2. 得到所有匹配项的索引

通过数组的push()把每个匹配项的索引位置都压入数组中

注意:

  • 如果给replace传入第一个参数是字符串, 则只会替换第一个

2. 语法:

1. 语法一:

字符串.replace(正则表达式,"用于替换的字符串")//返回替换后的字符串

1.1. 说明:

"用于替换的字符串"具有特殊意义的转义字符:

$1、$2、...、$99	与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$&	            整个匹配项。
$`	            位于匹配子串左侧的文本。
$'	            位于匹配子串右侧的文本。
$$	            表示$这个符号。

2. 语法二:

字符串.replace(正则表达式,function(匹配项,匹配组1,匹配组2,匹配组3,...,索引位置,原字符串,命名捕获组对象){})//返回替换后的字符串

2.1. 说明:

  1. 遍历将每一个匹配项以及相应参数传给处理函数, 然后以该函数的返回值来替换该匹配项
  2. 传入该回调函数的参数实际上就是从RegExpMatch解包而来的
  3. 索引位置指的是匹配项第一个字符在原字符串中的位置
    1. 每个匹配项的索引位置在替换过程是不会改变的, 无论替换多长的字符串
  4. 匹配组1, 匹配组2, 匹配组3,...的数量由具体的正则表达式确定
    1. 所以要想使用索引位置和原字符串, 推荐把第二个参数往后都全部放进一个数组中, 即(...args)
    2. 然后再访问数组的倒数元素 js 数组倒数元素
  5. 命名捕获组对象只会在正则表达式存在命名捕获组的时候才会被传递进回调函数中
    1. 其中有一组键值对, 键名为捕获组的名字, 键值为捕获组中的匹配字符串

3. 2. 实例 :

替换与正则表达式匹配的子串

var re = /(\w+)\s(\w+)/; 
var str = "zara ali"; 
var newstr = str.replace(re, "$2, $1"); 
console.log(newstr); // ali, zara

let str = "Hi I'm Tony";
let result =str.replace(/\b\w+\b/g,function(word,...args){
    console.log("匹配项:"+word+" 位置:"+args.slice(-2)[0]+" 原字符串"+args.slice(-1)[0]);
    return "qql1";
})
console.log(result);
/*输出:
匹配项:Hi 位置:0 原字符串Hi I'm Tony
匹配项:I 位置:3 原字符串Hi I'm Tony
匹配项:m 位置:5 原字符串Hi I'm Tony
匹配项:Tony 位置:7 原字符串Hi I'm Tony
qql1 qql1'qql1 qql1
*/