Ich suche nach einer Implementierung der Funktion zum Ersetzen ohne Berücksichtigung der Groß- und Kleinschreibung. Zum Beispiel sollte es so funktionieren:
'This iS IIS'.replaceAll('is', 'as');
und Ergebnis sollte sein:
'Thas as Ias'
Irgendwelche Ideen?
AKTUALISIEREN:
Es wäre toll, es mit Variable zu verwenden:
var searchStr = 'is';
'This iS IIS'.replaceAll(searchStr, 'as');
javascript
Sergey Metlov
quelle
quelle
.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); };
Dies implementiert genau das Beispiel, das Sie bereitgestellt haben.
'This iS IIS'.replaceAll('is', 'as');
Kehrt zurück
'Thas as Ias'
quelle
Wenn Sie die Regex-Lösung verwenden, können Probleme auftreten, wenn Ihre Ersetzungszeichenfolge z. B. "?" Enthält. Sie müssen also alle Regex-Zeichen umgehen oder z.
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); };
Dies ändert nicht alle Vorkommen von 'is' in der Zeichenfolge. Daher können Sie eine while-Schleife in die Funktion schreiben.
quelle
Dies ist die Improvisation aus Pauls Antwort, und es gibt eine Leistungslücke zwischen Regex und Non-Regex
Der Regex-Code zum Vergleich ist die Antwort von Benjamin Fleming.
JSPerf Groß-
und Kleinschreibung
beachten Regex: 66.542 Operationen / Sek.
Nicht-Regex: 178.636 Operationen / Sek. (Split - Join)
Incase-sensitive
Regex: 37.837 Operationen / Sek.
Nicht-Regex: 12.566 Operationen / Sek. (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));
quelle
Verwenden Sie einen regulären Ausdruck.
'This iS IIS'.replace(/is/ig, 'as')
quelle
Ich empfehle die Funktion str_ireplace aus php.js, die sogar Zeichenfolgen aus Arrays ersetzt.
quelle