2016-12-24 42 views
0

我听说,JavaScript中的字符串具有不变性。如何在JavaScript中为String编写替换方法?

那么,我该如何编写一个方法来替换字符串中的某些字符呢?

我要的是:

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'); 

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

+0

'replace'返回一个新字符串。它不会修改原文。 –

+0

所以你想通过引用来替换字符串/字符? – Dwza

回答

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'));

6

您可以用下面的办法:

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

你甚至不需要一个新变量,只需使用'return this.replace(new RegExp(search,'g'),replacement);' – Dekel

+3

这与''abc'.replace(/ a/g ,'b');',除了它也调用另一个函数并创建一个RegExp对象。 –

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'))

这个想法是,你需要这个字符串的内容在一个临时变量中,然后你需要逐字符,如果该字符是你正在寻找的 - 你需要再次建立你的字符串。

相关问题