2011-09-05 19 views
31

Estoy buscando cualquier implementación de función de sustitución insensible a mayúsculas y minúsculas. Por ejemplo, se debe trabajar de esta manera:Insensible a mayúsculas/minúsculas reemplace todo

'This iS IIS'.replaceAll('is', 'as'); 

y el resultado debe ser:

'Thas as Ias' 

¿Alguna idea?
Gracias de antemano.

ACTUALIZACIÓN:
Sería muy bueno para usarlo con la variable:

var searchStr = 'is'; 
'This iS IIS'.replaceAll(searchStr, 'as'); 

Respuesta

70

Try regex:

'This iS IIS'.replace(/is/ig, 'as'); 

Ejemplo de trabajo: http://jsfiddle.net/9xAse/

por ejemplo:
Usando RegExp objeto:

var searchMask = "is"; 
var regEx = new RegExp(searchMask, "ig"); 
var replaceMask = "as"; 

var result = 'This iS IIS'.replace(regEx, replaceMask); 
+1

¡Estupendo! Pero, ¿cómo usar la variable en su lugar? '.replace (searchMask, replaceMask)'? –

+0

@DOTNET Ninja: Actualicé la publicación con un ejemplo. – Chandu

+0

Daría dos votos a favor si pudiera para la segunda muestra de código que realmente explica lo que está pasando –

1

utilizar una expresión regular.

'This iS IIS'.replace(/is/ig, 'as') 
19
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' 
+0

Editado: ¡Olvidé el 'return'! –

+0

Esta es de hecho la solución correcta. La respuesta de Chandu hará un lío cuando hay un personaje que tiene un significado regex. – FlorianB

6

Cuando se utiliza la solución de expresiones regulares se pueden tener problemas si su cadena de reemplazo contienen, por ejemplo, "?". Así que hay que escapar todos los caracteres de expresiones regulares o utilizar ej .:

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 va a cambiar todas las ocurrencias de 'es' en la cadena. Por lo tanto, puede escribir un ciclo while en la función.

+0

Esto también es el doble de rápido que la solución de expresiones regulares. Consulte https://jsperf.com/replace-all-case-insenstive/1. – kofifus

0

Recomiendo la función str_ireplace de php.js, que incluso reemplaza las cadenas de las matrices.

Cuestiones relacionadas