Estoy buscando cualquier implementación de función de reemplazo que no distinga entre mayúsculas y minúsculas. Por ejemplo, debería funcionar así:
'This iS IIS'.replaceAll('is', 'as');
y el resultado debe ser:
'Thas as Ias'
¿Algunas ideas?
ACTUALIZAR:
Sería genial usarlo con variable:
var searchStr = 'is';
'This iS IIS'.replaceAll(searchStr, 'as');
javascript
Sergey Metlov
fuente
fuente
.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); };
Esto implementa exactamente el ejemplo que proporcionó.
'This iS IIS'.replaceAll('is', 'as');
Devoluciones
'Thas as Ias'
fuente
Cuando usa la solución de expresiones regulares, puede tener problemas si su cadena de reemplazo contiene, por ejemplo, "?". Por lo tanto, debe escapar de todos los caracteres regex o usar, por ejemplo:
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); };
esto no cambiará todas las apariciones de 'is' en la cadena. Por lo tanto, puede escribir un bucle while en la función.
fuente
Esta es la improvisación de la respuesta de Paul, y hay una brecha de rendimiento entre Regex vs Non-regex
El código de expresiones regulares para la comparación se toma la respuesta de Benjamin Fleming.
JSPerf Regex
sensible a
mayúsculas y minúsculas : 66,542 operaciones / s
No Regex: 178,636 operaciones / s (división - unión)
Regex sensible a mayúsculas y minúsculas : 37,837 operaciones / s
No Regex: 12,566 operaciones / 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));
fuente
Usa una expresión regular.
'This iS IIS'.replace(/is/ig, 'as')
fuente
Recomiendo la función str_ireplace de php.js, que incluso reemplaza cadenas de matrices.
fuente