Javascript 不区分大小写替换全部

Javascript 不区分大小写替换全部,javascript,Javascript,我正在寻找任何不区分大小写的替换函数的实现。例如,它应该是这样工作的: 'This iS IIS'.replaceAll('is', 'as'); 结果应该是: 'Thas as Ias' 有什么想法吗 更新: 最好将其与变量一起使用: var searchStr = 'is'; 'This iS IIS'.replaceAll(searchStr, 'as'); 使用正则表达式 'This iS IIS'.replace(/is/ig, 'as') 试试正则表达式: 'This iS

我正在寻找任何不区分大小写的替换函数的实现。例如,它应该是这样工作的:

'This iS IIS'.replaceAll('is', 'as');
结果应该是:

'Thas as Ias'
有什么想法吗

更新:

最好将其与变量一起使用:

var searchStr = 'is';
'This iS IIS'.replaceAll(searchStr, 'as');

使用正则表达式

'This iS IIS'.replace(/is/ig, 'as')
试试正则表达式:

'This iS IIS'.replace(/is/ig, 'as');
工作示例:

e、 g:
使用RegExp对象:

var searchMask = "is";
var regEx = new RegExp(searchMask, "ig");
var replaceMask = "as";

var result = 'This iS IIS'.replace(regEx, replaceMask);
这正好实现了您提供的示例

'This iS IIS'.replaceAll('is', 'as');
返回

'Thas as Ias'

使用正则表达式解决方案时,如果替换字符串包含例如“?”的内容,则可能会出现问题。因此,您必须转义所有正则表达式字符或使用例如:

String.replacei = String.prototype.replacei = function (rep, rby) {
    var pos = this.toLowerCase().indexOf(rep.toLowerCase());
    return pos == -1 ? this : this.substr(0, pos) + rby + this.substr(pos + rep.length);
};

这不会更改字符串中出现的所有“is”。因此,您可以在函数中编写while循环。

我建议使用php.js中的函数,它甚至可以替换数组中的字符串。

这是Paul答案中的即兴创作,正则表达式与非正则表达式之间存在性能差距

用于比较的正则表达式代码采用Benjamin Fleming的答案


区分大小写
正则表达式:66542次运算/秒
非正则表达式:178636次操作/秒(拆分-合并)

案件敏感
正则表达式:37837次运算/秒
非正则表达式:12566次操作/秒(indexOf-substr)

String.prototype.replaces=函数(str、replace、incase敏感){
如果(!incase敏感){
返回此.split(str).join(replace);
}否则{
//用正则表达式替换此部分以获得更高的性能
var strLower=this.toLowerCase();
var findLower=String(str).toLowerCase();
var strTemp=this.toString();
var pos=strLower.length;
while((pos=strLower.lastIndexOf(findLower,pos))!=-1){
strTemp=strTemp.substr(0,pos)+replace+strTemp.substr(pos+findLower.length);
pos--;
}
返回strTemp;
}
};
//范例
var text=“快狗跳过懒狗”;

log(text.replaces(“dog”,“Cat”,true))太好了!但如何使用变量来代替呢
.replace(searchMask,replaceMask)
?@DOTNET Ninja:用一个例子更新了这篇文章。如果可能的话,我会投两张赞成票,让第二个代码示例真正解释发生了什么警告:如果有一个字符有正则表达式的意思,这个答案会弄得一团糟。有关正确的方法,请参见本杰明·弗莱明的答案。非常感谢你,老兄!我直接在字符串中尝试。这确实是正确的解决方案。Chandu的答案在有正则表达式含义的字符时会造成混乱。这也可以处理如下情况:txt.replaceAll(“(test12)”,”)目前为止的最佳解决方案。工作是一种享受。谢谢Ben。这也比regexp解决方案快一倍。。请参阅此“仅替换一次”为如此简单的任务使用第三方库可能有些过分。
String.replacei = String.prototype.replacei = function (rep, rby) {
    var pos = this.toLowerCase().indexOf(rep.toLowerCase());
    return pos == -1 ? this : this.substr(0, pos) + rby + this.substr(pos + rep.length);
};