function replace(text, reg){
    reg = new RegExp(text, "ig");
    return text.replace(reg, function(word){
        return word.toUpCase();
    });
}很简单的一个方法,但是有时候调用函数的时候,reg参数有可能包含一些正则的符号 ,例如 reg = "***", reg = "\d",可能会导致输出的结果不正确。所以这里想不使用正则式,用String.replace,可是string.replace只会替换第一个,所以
可能的代码会是:while(text.indexOf(reg) !== -1){
    text.replace(reg, function(){ ... });
}请问有更优雅的一点的方案吗? 

解决方案 »

  1.   

    ps: 这里的 参数 reg 是字符串类型。
      

  2.   

    先做一个转义。
    function replace(text, reg){
        reg = new RegExp(reg.replace(/[().+*?^$|\\\[\]]/g, "\\$&"), "ig");
        return text.replace(reg, function(word){
            return word.toUpperCase();
        });
    }alert(replace("[abc]^^$$", "[abc]"));[ABC]^^$$
      

  3.   

    我的实际使用环境是这样的: 
    _decorateLiteral: function(text, pattern){
        while(text.indexOf(pattern) !== -1){
            text = text.replace(pattern, function(word){
                return "<b>" + word + "</b>";    
            });
        }
        
        return text;
    },
    很明显这里会导致无限循环,但是在第一个版本(正则式版本),有可能会因为传到了不期待的字符串导致出错。所以请问大家这里应该怎么写?谢谢