如何在JavaScript中为String编写替换方法?

时间:2016-12-24 23:42:01

标签: javascript string

我听说,JavaScript中的字符串具有不变性。

那么,我怎样才能编写一个方法来替换字符串中的某些字符?

我想要的是:

String.prototype.replaceChar(char1, char2) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == char1) {
            this[i] = char2;
        }
    }
    return this;
}

然后,我可以这样使用它:

'abc'.replaceChar('a','b'); // bbc

我知道它不起作用,因为字符串的不变性。

但在本机代码中,我可以使用这样的原生替换方法:

'abc'.replace(/a/g,'b');

我真的不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:6)

您可以使用以下方法:

String.prototype.replaceAll = function(search, replacement) {
    return this.replace(new RegExp(search, 'g'), replacement);
};

答案 1 :(得分:1)

如果您想要一个没有正则表达式的解决方案(作为一种学习方式),您可以使用以下内容:

String.prototype.replaceChar = function(char1, char2) {
  var s = this.toString();
  for (var i = 0; i < s.length; i++) {
    if (s[i] == char1) {
      s = s.slice(0, i) + char2 + s.slice(i+1);
    }
  }
  return s;
}
console.log('aaabaaa'.replaceChar('a', 'c'))

这个想法是你需要temp变量中字符串的这个内容,然后你需要去char-by-char,如果那个char是你要找的那个 - 你需要再次构建你的字符串。

答案 2 :(得分:1)

您也可以使用数组:

String.prototype.replaceChar = function (char1, char2) {
newstr=[];
for (i = 0; i < this.length; i++) {
newstr.push(this[i]);
if (newstr[i] == char1) {
newstr[i] = char2
}
}

return newstr.join("");
}

console.log('abca'.replaceChar('a','G'));