寫在前面: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)
}