javascript - JavaScript字符串替换与replaceAll
问题描述
ECMAScript 2021 添加了一个新的字符串函数replaceAll
。很久以前,在不远的星系中,人们使用split
+join
或正则表达式来替换所有出现的字符串。
我创建了以下示例以将新方法与旧方法进行比较。虽然我可以在第一种情况下看到一些差异,例如我不能用+使用替换模式,或者我需要用 转义特殊字符,但在第二种情况下我看不到任何区别。split
join
RegExp(str,"g")
新方法和旧方法有什么区别(行为差异、性能、浏览器兼容性……)?
const source = "abcdefabcdef";
const str1 = "abc", str2 = "xyz";
const reg1 = /abc/g, reg2 = "xyz";
//Case 1 : When we want to replace a string by another
console.log(source.split(str1).join(str2));
console.log(source.replace(new RegExp(str1,"g"),str2));
//versus
console.log(source.replaceAll(str1,str2));
//Case 2 : When we want to use a regular expression
console.log(source.replace(reg1,reg2));
//versus
console.log(source.replaceAll(reg1,reg2));
//Result = "xyzdefxyzdef"
解决方案
通过收集 的文档,replaceAll
我们发现以下花絮:
const newStr = str.replaceAll(regexp|substr, newSubstr|function)
注意:使用 a 时,
regexp
您必须设置全局 ("g") 标志;否则,它将抛出 TypeError:“replaceAll 必须使用全局 RegExp 调用”。
换句话说,当replaceAll
使用正则表达式或调用时RegExp
,它必须使用全局标志。replaceAll
因此,与仅使用 current 相比,调用似乎并没有多少收获replace
。但是,与它的一个区别replaceAll
是,当传递一个字符串时,它会自动进行全局替换。通过不必输入全局标志,您可以在此处节省一些打字时间。
推荐阅读
- django - Django密码重置没有反向匹配
- mime - HEIC文件签名
- sql - 使用空值/限制对空列进行排序时,Postgresql 的奇怪行为
- google-app-maker - 将来自两个数据源的数据合并到一个表中
- r - ggplot2:创建一个带有单独观察的箱须图
- typescript - 打字稿不能转换为泛型类型变量
- apache-kafka - 使用卡夫卡流将数据从输入主题写入输出主题时卡夫卡消费者出错
- python - 在 Anaconda 中安装 py2exe 时出现无法满足的错误
- javascript - 如何在 Bootstrap 4 手风琴示例中折叠边框?
- android - 如何在 android 的工作管理器中传递 POJO 类?