replaceAll函数:脚本太长而无法执行
replaceAll function : Script too long to execute
这是我的代码:
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);
};
但是在您的情况下,您必须替换"! "== false" for "> -1"并从" this "返回。Replace (search, Replace);"您必须输入一个变量,因为"Replace"函数不会改变"this"的值,而只是返回新的字符串值。
您可能能够使用内置的替换函数实现您想要的功能,但将g标志附加到正则表达式例如
var x="hihi";
x='hihi'.replace(/hi/g, 'i');
我发现这种方法更好:
String.prototype.replaceAll = function(search, replace){
if(!replace){
return this;
}
return this.replace(new RegExp(search, 'g'), replace);
};
String#replace
返回一个new字符串;因此,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;
};
还要注意,不建议修改原生原型。
我更喜欢与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))
表示真正的布尔值(不是必需的)。
相关文章:
- 如何做到这一点,使代码在不传递条件后执行函数
- javascript自执行函数-不同的语法
- JavaScript:只有当数组中的所有项都为true时才执行函数
- iFrame url更改时执行函数
- 为什么AngularJS在每个摘要循环上都执行函数
- 如何使用setInterval执行函数
- 当*ngFor以角度2结束时执行函数
- Ajax调用完成后如何执行函数
- 在显示引导弹出窗口之前执行函数
- 从自执行函数返回函数的Javascript性能命中率
- 在操作完成时执行函数
- jquery/js中的自执行函数
- 如何仅在完成对gap.client.youtube的请求.execute后执行函数
- 构造函数函数中的自执行函数的OO上下文/范围
- Javascript未使用=运算符执行函数
- AngularJS:如何按照预定义的顺序执行函数
- 在不使用隔离作用域的情况下执行函数的角度指令
- 如何在页面加载后执行函数是在 AngularJS 中完成的
- 完成页面加载后执行函数
- 如何在完成完全执行函数后触发循环