在 ECMAScript 2021(ES12) 中,JavaScript 新增了一个 String.prototype.replaceAll() 方法。这个方法类似于 String.prototype.replace() 方法,但不同之处在于它会替换所有匹配的字符串,而不仅仅是第一个匹配。
在本文中,我们将详细介绍 String.prototype.replaceAll() 方法,并通过一些示例代码来演示它的用法。
基本语法
String.prototype.replaceAll() 方法的基本语法如下:
str.replaceAll(searchValue, replaceValue)
其中,searchValue 参数可以是一个普通字符串或者一个正则表达式,用于匹配要替换的部分。replaceValue 参数可以是一个字符串或者一个函数,用于指定替换的字符串。
用法示例
下面让我们来看一些使用示例吧。
替换普通字符串
首先,我们来看一个替换普通字符串的示例。假设我们有一个字符串 str
,它包含多个相同的字符序列 abc
,而我们想要把这些字符序列替换成另一个字符串 def
。我们可以使用如下代码:
let str = 'abc foo abc bar abc baz'; let newStr = str.replaceAll('abc', 'def'); console.log(newStr);
上面的代码会把 str
中所有的 abc
都替换成 def
,然后输出:
'def foo def bar def baz'
替换正则表达式
接下来,我们来看一些使用正则表达式的示例。
假设我们有一个字符串 str
,它包含一组相同的日期字符串,格式为 YYYY-MM-DD
。我们想要把这些日期字符串中的横线 -
替换成斜杠 /
,可以用如下代码:
let str = '2021-04-01, 2021-05-01, 2021-06-01'; let newStr = str.replaceAll(/-/g, '/'); console.log(newStr);
上面的代码使用了一个全局正则表达式 /-/g
,其中 /
是需要替换的字符,而 g
表示 global
,表示匹配所有出现的字符。然后输出:
'2021/04/01, 2021/05/01, 2021/06/01'
替换为函数返回值
最后,我们来看一些使用替换函数的示例。
假设我们有一个字符串 str
,它包含一些需要替换的特定单词,比如 foo
和 bar
。我们想要用一个函数来动态生成替换后的字符串,可以用如下代码:
let str = 'foo X bar Y baz'; let newStr = str.replaceAll(/\b(foo|bar)\b/g, (match) => { return match.toUpperCase(); }); console.log(newStr);
上面的代码使用了正则表达式 /\b(foo|bar)\b/g
,表示匹配单词 foo
或 bar
。然后我们把 replaceValue
参数设置成一个函数,该函数接收一个 match
参数,表示当前匹配到的子字符串,然后返回一个新的字符串。这里我们将匹配到的子字符串转换成大写字母形式,然后输出:
'FOO X BAR Y baz'
结论
以上是使用 String.prototype.replaceAll() 方法的一些示例。虽然这个方法看起来很简单,但它可以帮助我们轻松地实现字符串替换的功能。尽管在实际项目中我们很少会使用到这么高级的字符串替换,但掌握这个方法还是非常有必要的。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672890d32e7021665e20b36e