Necesito eliminar todas las apariciones de color1 ... color99 de una cadena en JavaScript. Escribí una expresión regular simple para esto, pero no funciona por alguna razón:

> 'color12'.replace('/color[1-9]?[0-9]/g','')
'color12'

Sin embargo, si creo un objeto RegExp, funciona:

> var regex=new RegExp('color[1-9]?[0-9]','g');
> 'color12'.replace(regex,'');
''

¿Qué parte de la sintaxis de regexp de JavaScript me falta?

1
Konstantin Pereiaslov 4 sep. 2014 a las 16:26

5 respuestas

La mejor respuesta

De acuerdo con la Documentación, la función de reemplazo ingresa un Objeto Regex o una subcadena y una cadena de reemplazo .

El método replace () devuelve una nueva cadena con algunas o todas las coincidencias de un patrón reemplazado por un reemplazo. El patrón puede ser una cadena o un RegExp, y el reemplazo puede ser una cadena o una función que se invoque para cada coincidencia. Sintaxis

str.replace (regexp | substr, newSubStr | function [, flags]);

Devuelve

Una nueva cadena con algunas o todas las coincidencias de un patrón reemplazado por un reemplazo. Parámetros

regexp Un objeto RegExp. La coincidencia se reemplaza por el valor de retorno del parámetro # 2.

substr Una cadena que se reemplazará por newSubStr.

newSubStr La cadena que reemplaza la subcadena recibida del parámetro # 1. Se admiten varios patrones de reemplazo especiales; consulte la sección "Especificar una cadena como parámetro" a continuación.

En su caso, toma el primer argumento como una subcadena. Como 'color12' no tiene una subcadena como '/ color [1-9]? [0-9] / g', no se reemplaza.

Si lo cambias a,

'color12'.replace(/color[1-9]?[0-9]/g,'')

La primera expresión ahora se trata como un objeto RegEx y la función devuelve el resultado apropiado.

Leer más:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

1
BatScream 4 sep. 2014 a las 12:34

Puedes probar este código:

str = 'abscolor12ikg';
regex=new RegExp('color[1-9]?[0-9]','g');
str = str.replace(regex,'');
alert(str)

Muestra absikg

JSfiddle

0
Samuel Dauzon 4 sep. 2014 a las 12:32

Su primer método es interpretar la expresión regular como una cadena.

'color12'.replace(/color[1-9]?[0-9]/g, '')
1
Ben Fortune 4 sep. 2014 a las 12:30

Eliminar las comillas del REGEX

      'color12'.replace(/color[1-9]?[0-9]/g,'')

Funcionará mejor

0
mplungjan 4 sep. 2014 a las 12:30

Esto debería hacerlo:

'color12'.replace(/color[1-9]?[0-9]/g, '')
1
Daryl Ginn 4 sep. 2014 a las 12:31