我在寻找不区分大小写的替换函数的任何实现。例如,它应该像这样工作:不区分大小写全部替换
'This iS IIS'.replaceAll('is', 'as');
和结果应该是:
'Thas as Ias'
任何想法?
在此先感谢。
UPDATE:
这将是巨大的,具有可变使用它:
var searchStr = 'is';
'This iS IIS'.replaceAll(searchStr, 'as');
我在寻找不区分大小写的替换函数的任何实现。例如,它应该像这样工作:不区分大小写全部替换
'This iS IIS'.replaceAll('is', 'as');
和结果应该是:
'Thas as Ias'
任何想法?
在此先感谢。
UPDATE:
这将是巨大的,具有可变使用它:
var searchStr = 'is';
'This iS IIS'.replaceAll(searchStr, 'as');
尝试正则表达式:
'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);
使用正则表达式。
'This iS IIS'.replace(/is/ig, 'as')
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'
编辑:忘记'返回'! –
这确实是正确的解决方案。当有一个具有正则表达意义的角色时,Chandu将会弄得一团糟。 – FlorianB
当您使用正则表达式的解决方案,你可以得到的问题,如果您的替换字符串包含例如“?”。所以,你必须逃避所有正则表达式的字符或使用例如为:
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循环。
这也比正则表达式解决方案快一倍。请参阅https://jsperf.com/replace-all-case-insenstive/1 – kofifus
我推荐php.js中的str_ireplace函数,它甚至可以从数组中替换字符串。
太棒了!但是如何使用变量呢? '.replace(searchMask,replaceMask)'? –
@DOTNET忍者:用示例更新了帖子。 – Chandu
我会给两个upvotes,如果我能为第二个代码示例,实际上解释发生了什么 –