2012-02-16 15 views

Respuesta

30

Se necesita el modificador /g para reemplazar cada ocurrencia:

"a100.dfwe".replace(/[^0-9]+/g, ""); 

También elimina la redundancia i modificador y la captura sin usar sub-expresión se prepara para usted. Como otros han señalado, también se puede utilizar \D para acortar aún más:

"a100.dfwe".replace(/\D+/g, ""); 
+0

gracias, y lo que hace exactamente el signo "+" representa? –

+0

@PrakashRaman: significa * coincide con uno o más de los caracteres anteriores *. No es necesario, pero aumentará ligeramente el rendimiento de la expresión regular al reducir el número de reemplazos requeridos. –

+0

(técnicamente esta respuesta responde a la pregunta, pero falla en las carrozas) "123.456px" .replace (/ \ D +/g, ""); -> 123456 –

17

\D significa “no dígitos”:

"a100.dfwe".replace(/\D/g, "") 
+0

La forma más compacta. – Oybek

1

no funciona debido a la clase de caracteres [^0-9] (= cualquier cosa menos dígitos) con el modificador de repetición + solo coincidirá con una secuencia de caracteres no numéricos, como "aaa".

Para su propósito, utilice el modificador /g como los otros sugieren (para sustituir a todos los partidos a nivel mundial), y también se puede utilizar la clase de caracteres predefinida \D (= no un dígito) en lugar de [^0-9], lo que resultaría en la expresión más concisa /\D+/.

+0

para entenderlo mejor no debería la "a" y ".dfwe" estar bajo un grupo +, porque eso es 1 y más. –

+3

'\ D +' dice "buscar uno o más no dígitos", mientras que '(\ D) +' busca una o más repeticiones del (mismo) no dígito, que no es lo que desea. Ahora, si '/ \ D/g' (reemplaza cada uno de los no dígitos) o'/\ D +/g' (reemplaza cada secuencia de no dígitos) realmente no importa, excepto posiblemente en términos de rendimiento , que no se notará a menos que proceses decenas de miles de cadenas. – fanaugen

+0

ah muchas gracias. Eso me explica las cosas perfectamente. Gracias ! –

2

¿Qué pasa con los números negativos:

Usando el ejemplo de Andy E funciona a menos que tenga un número negativo. Luego elimina el símbolo '-' y también le deja un número siempre positivo (que podría estar bien). Sin embargo, si desea mantener el número menor que 0 sugeriría lo siguiente:

"a-100.dfwe".replace(/(?!-)[^0-9.]/g, "") //equals -100 

Pero tenga cuidado, porque esto dejará todos '-' símbolos, que le da un error si el texto se ve como "-a- 100.dfwe "

+0

No está hablando de números, solo grupos de dígitos. De todos modos, tu expresión regular aún coincide con '-' porque no está al principio de la cadena. –

0

Basado en la respuesta de @ user3324764: crea una función de prototipo y conviértela en un número.

String.prototype.extractNumber = function() 
{ 
    return Number(this.replace(/(?!-)[^0-9.]/g, "")); 
}; 

Ejemplo:

"123.456px".extractNumber(); // 123.456 
Cuestiones relacionadas