正则的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)
正则的replace方法详解实例

function replacer(match, p1, p2, p3, offset, string) {
    // p1 is nondigits, p2 digits, and p3 non-alphanumerics
    return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%dfghjk,()p'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
console.log(newString);  //abc - 12345 - #$*%dfghjk,()p
上一篇:「CQOI2015」任务查询系统


下一篇:省选测试9