2011-10-21 18 views
5

Todo lo que quiero es quitar todos los números de una cadena.Expresión regular simple de javascript para eliminar números

Así

var foo = "bar01"; 
alert(foo.replace(/\d/,'')); 

Lo que obviamente da "Bar1" porque sólo he especificado un dígito. Entonces, ¿por qué no funciona:

var foo = "bar01"; 
alert(foo.replace(/\d*/,'')); 

Lo que posibilita un "bar01"

+0

Ya encontró la respuesta, que es '.' en lugar de' * ' – jdborg

+0

Desafortunadamente no. Lo que has mencionado funcionará en el caso específico "bar01", porque dices que coincida con un dígito seguido de cualquier carácter. Esto no eliminará los dígitos al final de las cadenas, o más de 2 dígitos como máximo, etc. Vea las otras soluciones para la mejor solución. – GregL

Respuesta

12

Debe agregar la opción global

var foo = "bar01"; 
alert(foo.replace(/\d/g,'')); 

Es evidente que incluso se puede hacer algo como

var foo = "bar01"; 
alert(foo.replace(/\d+/g,'')); 

pero no sé si será más rápido (y al final la diferencia de velocidad sería muy muy, muy pequeño a menos que esté analizando megabytes de texto)

Si desea probar http://jsperf.com/replace-digits, el segundo parece ser más rápido para "blobs" de 10 dígitos y textos grandes.

+0

No estoy seguro si es más rápido o más lento, pero usar '/ \ d +/g' para la expresión regular tendría más sentido. – GregL

+0

@GregL Al final, si está eliminando todos los dígitos, el primero tiene más sentido. Con la primera, está eliminando todos los dígitos de uno en uno, mientras que el segundo busca "manchas" de dígitos (uno o más dígitos de longitud) y los elimina. Un humano pensaría de la segunda manera (porque los humanos tienen una visión más "global"), máquinas de la primera manera. – xanatos

+0

Cuál tiene más sentido es una cuestión de opinión, pero tenía curiosidad por saber cómo funcionaba el motor JS: si sería más eficiente que el motor de expresión regular reemplazara números enteros de números a la vez, o de un solo dígito individualmente . Probablemente varía según el motor JS. – GregL

2

Es posible que desee especificar el g bandera: foo.replace(/\d/g,'')

2
alert(foo.replace(/\d+/g,'')); 
1

Pruebe la bandera 'global':

foo.replace(/\d*/g,'')

Cuestiones relacionadas