Javascript replaceAll函数:脚本太长,无法执行
这是我的代码:Javascript replaceAll函数:脚本太长,无法执行,javascript,html,Javascript,Html,这是我的代码: String.prototype.replaceAll = function(search, replace){ if(!replace){ return this; } while(this.indexOf(search) !== false){ this.replace(search, replace); } return this; }; 我想这应该行得通,但是不行 代码应该是这样工作的: var
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
我更喜欢这样做
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);
};
但是在您的情况下,您必须替换“>-1”的“!==false”,并从“this.replace(search,replace);”返回,您必须输入一个变量,因为“replace”函数不会更改“this”的值只返回新的字符串值。您可以使用内置的replace函数来实现所需的功能,但需要将g标志附加到正则表达式中 i、 e
String#replace
返回一个新字符串;因此,这个
永远不会改变。您还需要返回一个新字符串,因为字符串(我认为)是不可变的
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;
};
另外,请注意它是。我发现这种方法更好:
String.prototype.replaceAll = function(search, replace){
if(!replace){
return this;
}
return this.replace(new RegExp(search, 'g'), replace);
};
我更喜欢按位not运算符与
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))
对于真正的布尔值(这不是必需的)
while(!!~this.indexOf(search))