String.prototype.replaceAll()

简介

在 ES2021 之前,要替换掉一个字符串中的所有指定字符,不得不使用正则表达式的 g 修饰符。

'aabbcc'.replace(/b/g, '_');
// 'aa__cc'

ES2021 可以用 String.prototype.replaceAll()替换全部字符串而不需要使用正则。

'aabbcc'.replaceAll('b', '_');
// 'aa__cc'

语法

const newStr = str.replaceAll(regexp|substr, newSubstr|function)

参数

regexp(pattern)

具有 g 修饰符的正则表达式。如果没有 g 修饰符,将抛出错误。 TypeError: "replaceAll must be called with a global RegExp".

substr

需要匹配的字符串。

newSubstr(replacement)

regexpsubstr 要替换的字符串。其中可以使用一些特殊字符串:

$&:匹配的子字符串。
$` :匹配结果前面的文本。
$':匹配结果后面的文本。
$n:匹配成功的第 n 组内容,n 是从 1 开始的自然数。这个参数生效的前提是,第一个参数必须是正则表达式。
$$:指代美元符号$。

function(replacement)

replaceAll()的第二个参数也可以是一个函数,该函数的返回值将替换掉第一个参数 searchValue 匹配的文本。

该函数可以接受多个参数。第一个参数是捕捉到的匹配内容,第二个参数捕捉到是组匹配(有多少个组匹配,就有多少个对应的参数)。倒数第二个参数是捕捉到的内容在整个字符串中的位置,最后一个参数是原字符串。

const str = '123abc456';
const regex = /(\d+)([a-z]+)(\d+)/g;

function replacer(match, p1, p2, p3, offset, string) {
  return [p1, p2, p3].join(' - ');
}

str.replaceAll(regex, replacer);
// 123 - abc - 456

返回值

它的用法与 replace()相同,返回一个新字符串,不会改变原字符串。

示例

非全局 regex 抛出

'aabbcc'.replaceAll(/b/, '.');
// TypeError: replaceAll must be called with a global RegExp

正确用法:

'aabbcc'.replaceAll(/b/g, '.');
// "aa..cc"
Copyright © 零度实验室 2020 all right reserved,powered by Gitbook修订时间: 2021-07-02 10:46:52

results matching ""

    No results matching ""