1.首先,正则表达式是什么
正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式是对象。这些模式被用于 RegExp 的 exec
和 test
方法, 以及 String 的 match
、matchAll
、replace
、search
和 split
方法。
2.字符串的replace()方法
replace() 方法返回一个由替换值(replacement)替换一些或所有匹配的模式(pattern)后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。
原字符串不会改变。
(1)语法 :str.replace(regexp|substr, newSubStr|function)
- 当模式(pattern)为字符串时。
一个将被 newSubStr 替换的 字符串。其被视为一整个字符串,而不是一个正则表达式。仅第一个匹配项会被替换。
举个例子:
const str = 'abcc 1212&';
console.log(str.replace('12', '$')); // abcc $12&
- newSubStr (replacement)
用于替换掉第一个参数在原字符串中的匹配部分的字符串。该字符串中可以内插一些特殊的变量名(见MDN)
const str = 'abcc 1212';
const reg = /([a-c]+)(\s*)(\d+)/g;
console.log(str.replace(reg, '$3$2$1')); // 1212 abcc
-
function (replacement)
一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数(这里指的是模式)匹配到的结果。 -
replace方法的第二个参数为函数时。
可以指定一个函数作为第二个参数。在这种情况下,当匹配执行后,该函数就会执行。 函数的返回值作为替换字符串。 另外要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用,每次匹配都会被调用。
该函数的参数,说明如下:
下面给个例子:
const str = 'abcc 1212';
const reg = /([a-c]+)\s*(\d+)/g;
console.log(str.replace(reg, ($0, $1, $2) => {
return $2 + $1;
}));
// $0 = str,即正则表达式reg匹配的子串。
// $1 = abcc,是([a-c]+)匹配的子串。
// $2 = 1212,是(\d+)匹配的子串。
结果为: