天天看點

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)
}
           

繼續閱讀