1. 程式人生 > >非正則實現JS字串的replaceAll方法

非正則實現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"));