Skip to content

Emular la funcionalidad de replaceAll de Java en Javascript

11 julio 2011

Si habéis trabajado con cadenas (String) en Java, seguro que alguna vez habéis hecho uso de la función replaceAll() para reemplazar unos caracteres o cadena de caracteres por otros. Esta función es muy útil para el procesado y limpieza de cadenas de texto, por ejemplo a la hora de compactar los espacios en blanco. La potencia de esta función radica en que uno de los parámetros de entrada que acepta, puede interpretarse como una Expresión Regular, de manera que vamos a poder utilizar unos filtros muy precisos para el reemplazo de caracteres. Si habéis intentado hacer esto mismo en Javascript, habréis descubierto (con mayor o menor incredulidad) que no hay ninguna función denominada replaceAll(), sólo existe replace(). Además si habéis utilizado esta función en Javascript habréis descubierto a su vez, que sólo reemplaza el carácter o cadena de caracteres la primera vez que aparece en la cadena. Por ejemplo:

var cadena = "Gato Gato";
cadena = cadena.replace('o','a');
//cadena = 'Gata Gato'

Por tanto ¿cómo hacemos para reemplazar todos los caracteres ‘o’ de nuestra cadena por ‘a’? La respuesta es bastante sencilla y consiste en algo que había apuntado previamente al hablar de replaceAll() de Java. replace() de Javascript, acepta como primer parámetro una expresión regular y, por tanto, si en lugar de pasar una ‘o’ como primer parámetro, pasamos una expresión regular que represente a la ‘o’ y le indique además que busque en toda la cadena hasta el final de ésta, ya lo tenemos. Por ejemplo:

var cadena = "Gato Gato";
cadena = cadena.replace(/o/g,'a');
//cadena = 'Gata Gata'

O utilizando el objeto RegExp() de Javascript:

var cadena = "Gato Gato";
cadena = cadena.replace(new RegExp('o','g'),'a');
//cadena = 'Gata Gata'

NOTA: La ‘g’ es un modificador que indica que se realice una búsqueda global en toda la cadena en lugar de detenerse en el primer resultado. Hay otros dos modificadores que podemos usar que son: ‘i’ para indicar que la búsqueda sea case-insensitive y ‘m’ para que la búsqueda sea multilínea.

Cualquier mejora, duda, sugerencia, será bien recibida 😉

Anuncios
No comments yet

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: