非正则实现JS字符串的replaceAll方法

JavaScript中,有一个字符串方法,很让人不爽。

那就是replace方法。

假如你传入的第一个参数是字符串。

它只会替换第一个匹配到的子串,而无法全局替换。

事实上,你也可以传入正则表达式,带g”参数,弥补这个缺陷。

但总归还是不够爽。

那就自己写个replaceAll方法吧!

下面的实现,我没有用到正则。

/*
input:输入字符串
find:要做替换的子串
replacement:替换成
*/
function replaceAll(input, find, replacement) {
    
    var res = "";
    var pos = 0;
    var index = input.indexOf(find, pos);
    //如果要替换的子串是空字符串
    if(find === ""){
        res += replacement;
        for(var i=0;i<input.length;i++){
            res += input.charAt(i) + replacement;
        }
        return res;
    }
    
    while(index >= 0){
        res += input.slice(pos, index);
        res += replacement;
        pos = index + find.length;
        index = input.indexOf(find, pos);
    }
    
    return res + input.slice(pos);
}

var input = "tomcat";
//_t_o_m_c_a_t_
console.log(replaceAll(input, "", "_"));
//pomcap
console.log(replaceAll(input, "t", "p"));
//tomdog
console.log(replaceAll(input, "cat", "dog"));

点赞