2011-09-05 89 views
31

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

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

和结果应该是:

'Thas as Ias' 

任何想法?
在此先感谢。

UPDATE:
这将是巨大的,具有可变使用它:

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

回答

70

尝试正则表达式:

'This iS IIS'.replace(/is/ig, 'as'); 

工作实施例:http://jsfiddle.net/9xAse/

e.g:
使用RegExp对象:

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

var result = 'This iS IIS'.replace(regEx, replaceMask); 
+1

太棒了!但是如何使用变量呢? '.replace(searchMask,replaceMask)'? –

+0

@DOTNET忍者:用示例更新了帖子。 – Chandu

+0

我会给两个upvotes,如果我能为第二个代码示例,实际上解释发生了什么 –

1

使用正则表达式。

'This iS IIS'.replace(/is/ig, 'as') 
19
String.prototype.replaceAll = function(strReplace, strWith) { 
    // See http://stackoverflow.com/a/3561711/556609 
    var esc = strReplace.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 
    var reg = new RegExp(esc, 'ig'); 
    return this.replace(reg, strWith); 
}; 

这实现了您提供的示例。

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

返回

'Thas as Ias' 
+0

编辑:忘记'返回'! –

+0

这确实是正确的解决方案。当有一个具有正则表达意义的角色时,Chandu将会弄得一团糟。 – FlorianB

6

当您使用正则表达式的解决方案,你可以得到的问题,如果您的替换字符串包含例如“?”。所以,你必须逃避所有正则表达式的字符或使用例如为:

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

这是不会改变的所有出现“是”的字符串中。因此你可以在函数中写一个while循环。

+0

这也比正则表达式解决方案快一倍。请参阅https://jsperf.com/replace-all-case-insenstive/1 – kofifus