2010-11-16 17 views
18

quiero int de cadena en javascript cómo puedo obtener decómo analizar la cadena a int en javascript

test1, stsfdf233, fdfk323,

son alguien me muestran el método para obtener el número entero de este cuerda.

es una regla que int siempre está en la parte posterior de la cadena.

cómo puedo conseguir el int que era al fin en mi cadena

Respuesta

51
var s = 'abc123'; 
var number = s.match(/\d+$/); 
number = parseInt(number, 10); 

El primer paso es una expresión regular simple - \d+$ coincidirá con los dígitos cerca del final.
En el siguiente paso, usamos parseInt en la cadena con la que hemos coincidido antes, para obtener un número adecuado.

+0

Esto no va a funcionar. 'number' es una matriz. – jwueller

+1

esto no funciona para cadenas como "abcs12s3", "123abc" –

+5

@Chinmayee: "es una regla que int siempre está en la parte posterior de la cadena" – darioo

2
var str = "stsfdf233"; 
var num = parseInt(str.replace(/\D/g, ''), 10); 
+1

Nota: esta solución funciona incluso si los números no están al final de la cadena (también para cadena como ab12c34) –

+1

@fcalderan: Sí, pero casi con certeza * no es la forma en que se supone que debe *. (Su ejemplo "ab12c34" devolverá el número 1,234. ¿Resultado deseado? Lo dudo.) –

+0

@ T.J. Crowder, ese es el motivo de mi comentario ... –

-2
javascript:alert('stsfdf233'.match(/\d+$/)[0]) 

Global.parseInt con radix es una exageración aquí, expresiones regulares extraída dígitos decimales ya y cadena rigth recortado

0

Esto podría ayudarle a

var str = 'abc123'; 
var number = str.match(/\d/g).join(""); 
3

Puede utilizar un regex para extraer los números en la cadena a través de String#match, y convertir cada uno de ellos a un número a través de parseInt:

var str, matches, index, num; 

str = "test123and456"; 
matches = str.match(/\d+/g); 
for (index = 0; index < matches.length; ++index) { 
    num = parseInt(matches[index], 10); 
    display("Digit series #" + index + " converts to " + num); 
} 

Live Example

Si los números realmente se producen sólo en los extremos de las cuerdas o simplemente quieren convertir el conjunto primera de dígitos que aparecen, puede simplificar un poco:

var str, matches, num; 

str = "test123"; 
matches = str.match(/\d+/); 
if (matches) { 
    num = parseInt(matches[0], 10); 
    display("Found match, converts to: " + num); 
} 
else { 
    display("No digits found"); 
} 

Live example

Si desea ignoran dígitos que no se encuentran al final, añadir $ hasta el final de la expresión regular:

matches = str.match(/\d+$/); 

Live example

+2

Eso es '/ \ d + $ /'. Refresque 'si', por cierto':) ' – Kobi

+0

@Kobi: ** Gracias ** por atrapar la cosa' $ ', lo pillé en el ejemplo pero no me di cuenta de que lo había escrito en el texto (I normalmente * copia * del ejemplo al texto, no al revés). –

+0

+1 Un 'if (coincide con)' Estoy seguro de que será una prueba más rápida que confiar en 'parseInt()' para que lo haga por usted. – user113716

1
var match = "stsfdf233".match(/\d+$/); 
var result = 0; // default value 
if(match != null) { 
    result = parseInt(match[0], 10); 
} 
1

Otra alternativa, esta vez sin sustituir o expresiones regulares, simplemente un bucle simple:

function ExtractInteger(sValue) 
{ 
    var sDigits = ""; 
    for (var i = sValue.length - 1; i >= 0; i--) 
    { 
     var c = sValue.charAt(i); 
     if (c < "0" || c > "9") 
      break; 
     sDigits = c + sDigits; 
    } 
    return (sDigits.length > 0) ? parseInt(sDigits, 10) : NaN; 
} 

ejemplo de uso:

var s = "stsfdf233"; 
var n = ExtractInteger(s); 
alert(n); 
+2

Un pequeño comentario: desea llamar a 'parseInt (sDigits, 10)', probar 'abc012', y luego' abc09'. – Kobi

+0

@Kobi: buena captura ... cambié mi publicación ahora. ¡Gracias! –

1

utiliza mi extensión a clase String:

String.prototype.toInt=function(){ 
    return parseInt(this.replace(/\D/g, ''),10); 
} 

continuación:

"ddfdsf121iu".toInt(); 

devolverá un número entero: 121

0

primer número positivo o negativo:

"foo-22bar11".match(/-?\d+/); // -22 
+0

¿Puedes explicar tu respuesta? – Rico

+0

esto está mal, ya que no responde pero no debe ser eliminado. Tiene valor. Encuentra que el primer –

+0

OP no pidió todas las ocurrencias, ni tampoco quería eso. Y ninguna de las respuestas dadas tiene en cuenta los números negativos y eso es lo que necesitaba, así que me di cuenta de esto. – brannigan