天天看点

JavaScript中replace与replaceall方法

写在前面:ES2021已经提供了 String.prototype.replaceAll 方法,因此不需要 通过 String.prototype.replace + 正则 来实现replaceAll 方法了。

replace:

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

replace(oldSubStr, newSubStr)

let str1 = 'aannkkaayyrr'
let str2 = str1.replace('aa', 'x')
// str2 = 'xnnkkaayyrr'
           

replaceAll

replace()方法只能替换目标字符串的第一个匹配的字符串,如果想要将目标字符串全部替换的话,JavaScript没有replaceAll方法

(注:ES2021已经提供了 String.prototype.replaceAll 方法)

因此要用正则表达式打到replaceAll的效果:

即:

replace( /oldSubStr/g , newSubStr )

let str1 = 'aannkkaayyrr'
let str2 = str1.replace(/aa/g, 'x')
// 注意:虽然'aa'是字符串,但是这里不能写成 let str2 = str1.replace(/'aa'/g, 'x')
// str2 = 'xnnkkxyyrr'
           

总结:

replace( /oldSubStr/g , newSubStr ) 或: replace(new RegExp(oldSubStr, ‘gm’), newSubStr)

一般在项目中,可以在公共方法中实现一个replaceAll方法,或者在String的原型对象中实现replaceAll方法:

// 定义为方法,放在公共方法文件中供大家使用
function replaceAll (str , oldSubStr, newSubStr) {
	if (str != null && oldSubStr!= null && newSubStr!= null) {
		return str.replace(new RegExp(oldSubStr, 'gm'), newSubStr)
	}
}
           
// 定义在String原型上
String.prototype.replace = function (oldSubStr, newSubStr) {
	return this.replace(new RegExp(oldSubStr, 'gm'), newSubStr)
}
           

继续阅读