这是我的代码:
String.prototype.replaceAll = function(search, replace){
if(!replace){
return this;
}
while(this.indexOf(search) !== false){
this.replace(search, replace);
}
return this;
};
我想它应该有用,但它没有。
代码应该像这样工作:
var x="hihi";
x.replaceAll("hi", "i");
最后x的值应为:
ii
答案 0 :(得分:2)
我更喜欢这样做。
String.prototype.replaceAll = function (search, replace) {
var str = this;
var pos = str.indexOf(search);
while (pos > -1) {
str = str.replace(search, replace);
pos = str.indexOf(search);
}
return (str);
};
但在您的情况下,您必须将“!== false”替换为“> -1”并从“this.replace(search,replace);”返回。你必须放入一个变量,因为“替换”函数不会改变“this”的值,只返回新的字符串值。
答案 1 :(得分:1)
您可以使用内置替换功能实现所需,但将g标志附加到正则表达式 即。
var x="hihi";
x='hihi'.replace(/hi/g, 'i');
答案 2 :(得分:0)
String#replace
返回新字符串;因此this
永远不会改变。你需要做的是返回一个新的字符串,因为字符串(我认为)是不可变的。
String.prototype.replaceAll = function(search, replace){
if(!replace){
return this;
}
var str = this;
while(~str.indexOf(search)){ // indexOf() doesn't return false
str = str.replace(search, replace);
}
return str;
};
答案 3 :(得分:0)
我发现这种方法更好:
String.prototype.replaceAll = function(search, replace){
if(!replace){
return this;
}
return this.replace(new RegExp(search, 'g'), replace);
};
答案 4 :(得分:0)
我更喜欢与indexOf
var a = ~'foo'.indexOf('o'), //-2, evaluates to true
b = ~'foo'.indexOf('x'); // 0, evaluates to false
-1
将评估为false,因为~-1 === 0
,但任何正数索引都会返回一个负数,其值为true
。因此,你可以简单地做
while(~this.indexOf(search))
甚至
while(!!~this.indexOf(search))
表示一个真正的布尔值(不是必需的)。