Javascript cuenta con múltiples funciones relacionadas con el objeto string, entre las que podemos encontrar el método replace.
El método replace de javascript nos permite buscar una subcadena en un String para ser sustituida por otra subcadena. Tal y como conocemos y solemos utilizar este método, replace() únicamente nos reemplazará la primera ocurrencia que haya encontrado en la caden original.
La primera idea que puede venirse a la cabeza para implementar una función replaceAll con javascript es recorrer la cadena original y reemplazar el subcadena deseada tantas veces como apariciones puedan existir en la misma. Este código quedaría algo así:
/**
* Función que permite reemplazar TODAS las subcadenas encontradas
* en un string por otra nueva subcadena.
*/
function replaceAll(text, search, newstring ){
while (text.toString().indexOf(search) != -1)
text = text.toString().replace(search,newstring);
return text;
}
Sin embargo, esto no es necesario.
Lo que mucha gente no sabe o simplemente pasamos por alto, es que la función replace de javascript soporta expresiones regulares (suele pasar también con la mayoría de lenguajes).
Esta funcionalidad, nos permite implementar un nuevo método replaceAll mucho más sencillo utilizando nuestras queridas expresiones regulares.
El código quedaría ahora algo como:
/**
* Función que permite reemplazar TODAS las subcadenas encontradas
* en un string por otra nueva subcadena.
*/
function replaceAll(text, search, newstring ){
var out = text.replace(new RegExp(search, 'g'), newstring);
return out;
}
o simplemente:
// El texto a reeplazar deberá indicarse entre barras
text = text.replace(/find/g,”replace”)
NOTA: No es ninguna errata, cuando queramos indicar una expresión regular en el primer parámetro de la función replace de javascript, el texto irá indicado entre barras y SIN comillas.
Veamos algunos ejemplos:
// Resultado: a234ea234ea234e
var ejemplo1 = "abcdeabcdeabcde".replace(/bcd/g, "234");
// Resultado: 323232409121
var ejemplo2 = "3232,32409,121".replace(/,/g, "");
// Resultado: sn notcas del mundo
var ejemplo3 = "sin noticias del mundo".replace(/i/g, "");
Hemos visto por lo tanto 2 formas para implementar nuestro propio método replaceAll en javascript utilizando 2 fórmulas diferentes:
- – Utilizando un bucle para recorrer y reemplazar tantas veces como sea necesario la cadena original
- – Haciendo uso de expresiones regulares
En próximas entradas, veremos más en profundidad cómo utilizar expresiones regulares en javascript.