replace
一、认识
replace()
方法返回一个新字符串,其中一个、多个或所有匹配的 pattern
被替换为 replacement
。该方法并不改变调用它的字符串本身,而是返回一个新的字符串。字符串模式只会被替换一次。要执行全局搜索和替换,请使用带有 g
标志的正则表达式或使用 replaceAll()
。
二、语法
const str = "xxx";
const strNew = str.replace(pattern, replacement)
-
pattern
: 可以是字符串或者一个带有Symbol.replace
方法的对象,典型的例子就是正则表达式。任何没有Symbol.replace
方法的值都会被强制转换为字符串。 -
replacement
: 可以是字符串或函数。-
函数: 如果是函数,将为每个匹配调用该函数,并将其返回值用作替换文本。
-
字符串: 如果是字符串,它将替换由
pattern
匹配的子字符串。支持一些特殊的替换模式
-
-
strNew
: 一个新的字符串,其中一个、多个或所有的匹配项都被指定的替换项替换。
2.1 pattern 为正则表达式
如果 pattern
为正则表达式, 替换字符串可以包括以下特殊替换模式:
-
$$
: 插入一个 "$"。 -
$&
: 插入匹配的子字符串。 -
`$``: 插入匹配子字符串之前的字符串片段。
-
$'
: 插入匹配子字符串之后的字符串片段。 -
$n
: 插入第n
(索引从1
开始)个捕获组,其中n
是小于100
的正整数。 -
$
: 插入名称为Name
的命名捕获组。
只有当 pattern
参数是一个 RegExp
对象时,$n
和 $<Name>
才可用。如果 pattern
是字符串,或者相应的捕获组在正则表达式中不存在,则该模式将被替换为一个字面量。如果该组存在但未匹配(因为它是一个分支的一部分),则将用空字符串替换它。
2.2 replacement 为函数
你可以将第二个参数指定为函数。在这种情况下,匹配完成后将调用该函数。函数的结果(返回值)将用作替换字符串。注意: 上述 pattern
特殊替换模式不适用于替换器函数返回的字符串。
语法
const str = "xxx";
const strNew = str.replace(pattern, replacer);
function replacer(match,p1,p2,……,pn,offset,string,groups){
return replacement;
}
-
match
: 匹配的子字符串。(对应于上面的$&
。) -
p1,p2,……,pn
: 如果replace()
的第一个参数是RegExp
对象,则为捕获组(包括命名捕获组)找到的第n
个字符串。(对应于上面的$1
、$2
等。)例如,如果pattern
是/(\d+)(\w+)/
,则p1
是\a+
的匹配项,p2
是\b+
的匹配项。如果该组是分支的一部分(例如abc.replace(/(a)|(b)/, Replacer)
),则不匹配的替代项将为undefined
。 -
offset
: 原始字符串中匹配子字符串的偏移量。例如,如果整个字符串是abcd
,而匹配的子字符串是bc
,那么这个参数将是1
。 -
string
: 正在检查的原始字符串 -
groups
: 一个捕获组命名组成的对象,值是匹配的部分(如果没有匹配,则为undefined
)。仅在pattern
包含至少一个命名捕获组时才存在。
参数的确切数量取决于第一个参数是否为 RegExp
对象,以及它有多少个捕获组。
三、场景
3.1 交换单词
const str = 'wen qiang';
const reg = /(\w+)\s+(\w+)/;
const strNew = str.replace(reg, '$2 $1');
console.log(strNew);