如何解决JavaScript 字符串替换 vs replaceAll
ECMAScript 2021 添加了一个新的字符串函数 replaceAll
。
很久以前,在不远的星系中,人们使用 split
+ join
或正则表达式来表示 replace all occurences of a string。
我创建了以下示例来比较新方法与旧方法。
虽然我可以在第一种情况下看到一些差异,例如我不能将 replacement patterns 与 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
的 documentation,我们发现以下花絮:
const newStr = str.replaceAll(regexp|substr,newSubstr|function)
注意:使用 regexp
时,您必须设置全局 ("g") 标志;否则,它会抛出一个类型错误:“replaceAll 必须使用全局 RegExp 调用”。
换句话说,当使用正则表达式文字或 replaceAll
调用 RegExp
时,它必须使用全局标志。因此,与仅使用当前的 replaceAll
相比,调用 replace
似乎没有太大的好处。但是,与 replaceAll
的一个不同之处在于,当向它传递一个字符串时,它会自动进行全局替换。在这里,您可以省去一些打字的时间,而不必输入全局标志。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。