我在尋找不區分大小寫的替換函數的任何實現。例如,它應該像這樣工作:不區分大小寫全部替換
'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,如果我能爲第二個代碼示例,實際上解釋發生了什麼 –