¿Cómo eliminar o reemplazar todas las subcadenas de un string en Javascript?

publicado por: Anonymous

De la pregunta del SO original How to replace all occurrences of a string in JavaScript?

Por ejemplo, si tengo una cadena como esta:

var str = "Test abc test test abc test test test abc test test abc";

y hago:

str = str.replace('abc', '');

Sólo elimina la primera aparición de abc, ¿cómo elimino todas las subcadenas abc?

solución

Respuesta corta

Usa expresiones regulares (RegExp) con el parámetro g, búsqueda global

Fragmento

_x000D_

_x000D_

/**_x000D_
 * Ejemplo simple_x000D_
 *_x000D_
 */_x000D_
var cadena = "Test abc test test abc test test test abc test test abc";_x000D_
var re = /abc/g;_x000D_
var resultado = cadena.replace(re, '');_x000D_
console.log(resultado);

_x000D_

_x000D_

_x000D_

Observaciones

Las expresiones regulares no son triviales ya que ciertos caracteres tienen un efecto en la manera que se interpreta la expresión regular. El procesamiento de estas debe aplicarse sólo a cadenas seguras o en su defecto deberían escaparse antes de ser procesadas. A continuación un ejemplo mas completo.

_x000D_

_x000D_

/**_x000D_
 * Ejemplo simple modificado_x000D_
 *_x000D_
 */_x000D_
_x000D_
// Tomado de _x000D_
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions_x000D_
function escapeRegExp(string) {_x000D_
  return string.replace(/[.*+?^${}()|[]\]/g, '\$&'); _x000D_
}_x000D_
_x000D_
// Cadena a procesar_x000D_
var cadena = "Test abc test test abc test test test abc test test abc";_x000D_
_x000D_
// Simular entrada de usuario_x000D_
var entradaUsuario = "abc";_x000D_
_x000D_
// Aplicar la función para escapar la entrada de usuario_x000D_
var re = new RegExp(escapeRegExp(entradaUsuario),'g');_x000D_
_x000D_
// Aplicar reemplazo_x000D_
var resultado = cadena.replace(re, '');_x000D_
_x000D_
// Imprimir en la consola el resultado_x000D_
console.log(resultado);

_x000D_

_x000D_

_x000D_

Fuente

Respuesta a How to replace all occurrences of a string in JavaScript?

Véase también

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *