Szukam dowolnej implementacji funkcji zastępowania bez uwzględniania wielkości liter. Na przykład powinno działać tak:
'This iS IIS'.replaceAll('is', 'as');
a wynik powinien być:
'Thas as Ias'
Jakieś pomysły?
AKTUALIZACJA:
Byłoby wspaniale użyć go ze zmienną:
var searchStr = 'is';
'This iS IIS'.replaceAll(searchStr, 'as');
javascript
Siergiej Metłow
źródło
źródło
.replace(searchMask, replaceMask)
?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); };
To implementuje dokładnie podany przykład.
'This iS IIS'.replaceAll('is', 'as');
Zwroty
'Thas as Ias'
źródło
Kiedy używasz rozwiązania regex, możesz mieć problemy, jeśli twój ciąg zastępujący zawiera np. „?”. Musisz więc uciec przed wszystkimi znakami regex lub użyć np:
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); };
nie zmieni to wszystkich wystąpień „jest” w ciągu. Dlatego możesz napisać pętlę while w funkcji.
źródło
To jest improwizacja z odpowiedzi Paula i istnieje różnica w wydajności między Regex a Non-regex
Kod wyrażenia regularnego do porównania pochodzi z odpowiedzi Benjamina Fleminga.
JSPerf Z uwzględnieniem wielkości
liter
Regex: 66,542 Operacje / s
Non-Regex: 178636 Operations / sec (split - join)
Regex wrażliwy na incydenty: 37 837 operacji / s
Non-regex: 12566 operacji / s (indexOf - substr)
String.prototype.replaces = function(str, replace, incaseSensitive) { if(!incaseSensitive){ return this.split(str).join(replace); } else { // Replace this part with regex for more performance 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--; } return strTemp; } }; // Example var text = "A Quick Dog Jumps Over The Lazy Dog"; console.log(text.replaces("dog", "Cat", true));
źródło
Użyj wyrażenia regularnego.
'This iS IIS'.replace(/is/ig, 'as')
źródło
Polecam funkcję str_ireplace z php.js, która zastępuje nawet ciągi znaków z tablic.
źródło