正则的replace方法详解

MDN解释: 返回一个由替换值替换一些或所有匹配的模式后的新字符串。

使用以下值作为替换参数
序列变量名代表的值
1$$插入一个 “$”
2$&插入匹配的子串
3$`插入当前匹配的子串左边的内容
4$’插入当前匹配的子串右边的内容
5$n假如第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串。提示:索引是从1开始

实例讲解

  1. $$
let str = "abcdefg123";
let rg = /([a-zA-Z]+)/g;
console.log(str.replace(rg, '$$')); // 输出:$123

解析:rg匹配到abcdefg,所以将该串替换为$

  1. $&
let str = "123abcd123efgh";
let rg = /([a-zA-Z]+)/g;
console.log(str.replace(rg, '.$&')); //输出:123.abcd123.efgh

解析:rg匹配到abcd并将其插入,且前面带一个.和efgh同样前面也带个.
3. $`

let str = "*|abcd()";
let rg = /([a-zA-Z]+)/g;
console.log(str.replace(rg, '.$`')); //输出:*|.*|()

let str = "*|abcd()AAAA";
let rg = /([a-zA-Z]+)/g;
console.log(str.replace(rg, '.$`')); //输出:*|.*|().*|abcd()

解析
第一个,rg匹配到abcd,所以将其左边的所有字符串插入匹配的字符串位置,前面有*|,所以就会将abcd替换为.*|
第二个,rg首先匹配到abcd所以将其替换为.*|,继续向后又匹配到AAAA,此时前面有.*|abcd(),所以就将AAAa替换为.*|abcd()
4. $’

let str = "*|abcd()";
let rg = /([a-zA-Z]+)/g;
console.log(str.replace(rg, ".$'")); //输出:/*|.()()

解析:rg匹配到abcd,其右边的内容为(),所以就会将abcd替换为()
5. $n

let str = "*|abcd2345";
let rg = /([a-zA-Z]+)([0-9]+)/g;
console.log(str.replace(rg, '.$1')); //输出:*|.abcd
console.log(str.replace(rg, '.$2')); //输出:*|.2345

解析
第一个,rg匹配到abcd2345,然后寻找第一个括号匹配的字符串,匹配到abcd,所以就将abcd2345替换为.abcd
第二个,rg匹配到abcd2345,然后寻找第二个括号匹配的字符串,匹配到2345,所以就将abcd2345替换为.2345

使用函数作为参数

当匹配执行后,该函数就会执行。 函数的返回值作为替换字符串。
参数:replacer(match, p1, p2, p3, offset, string)
在这里插入图片描述实例

function replacer(match, p1, p2, p3, offset, string) {
    return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%()**'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
console.log(newString);  //abc - 12345 - #$*%dfghjk,()p

在这里插入图片描述

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值