Extraiga (“obtenga”) un número de una cadena

Tengo una cadena en javascript como `# box2 ‘y solo quiero el’ 2 ‘de ella.

Intentó:

var thestring = $(this).attr('href'); var thenum = thestring.replace( /(^.+)(\w\d+\w)(.+$)/i,'$2'); alert(thenum); 

Todavía devuelve # box2 en la alerta, ¿cómo puedo hacer que funcione?

Necesita acomodarse para cualquier número de longitud adjunto en el extremo.

Para este ejemplo específico,

  var thenum = thestring.replace( /^\D+/g, ''); // replace all leading non-digits with nothing 

en el caso general:

  thenum = "foo3bar5".match(/\d+/)[0] // "3" 

Dado que esta respuesta ganó popularidad por alguna razón, aquí hay una ventaja: generador de expresiones regulares.

 function getre(str, num) { if(str === num) return 'nice try'; var res = [/^\D+/g,/\D+$/g,/^\D+|\D+$/g,/\D+/g,/\D.*/g, /.*\D/g,/^\D+|\D.*$/g,/.*\D(?=\d)|\D+$/g]; for(var i = 0; i < res.length; i++) if(str.replace(res[i], '') === num) return 'num = str.replace(/' + res[i].source + '/g, "")'; return 'no idea'; }; function update() { $ = function(x) { return document.getElementById(x) }; var re = getre($('str').value, $('num').value); $('re').innerHTML = 'Numex speaks: ' + re + ''; } 
 

Hi, I'm Numex, the Number Extractor Oracle.

What is your string?

What number do you want to extract?

Deberías probar lo siguiente:

 var txt = "#div-name-1234-characteristic:561613213213"; var numb = txt.match(/\d/g); numb = numb.join(""); alert (numb);​ 

resultado

 1234561613213213 

Usando la función de coincidencia.

 var thenum = thestring.match(/\d+$/)[0]; alert(thenum); 

jsfiddle

Creo que esta expresión regular servirá para tu propósito:

 var num = txt.replace(/[^0-9]/g,''); 

Donde txt es tu cadena.

Básicamente arranca todo lo que no sea un dígito.

Creo que puedes lograr lo mismo al usar esto también:

 var num = txt.replace(/\D/g,''); 

Pruebe lo siguiente: string.replace(/[^0-9]/g, ''); Esto eliminará todos los caracteres que no sean dígitos, dejando solo dígitos en la cadena

 function retnum(str) { var num = str.replace(/[^0-9]/g, ''); return parseInt(num,10); } 
 console.log('abca12bc45qw'.replace(/[^0-9]/g, '')); console.log('#box2'.replace(/[^0-9]/g, '')); 

Intenté todas las combinaciones citadas anteriormente con este Código y lo puse en funcionamiento, fue el único que trabajó en esa cadena -> (12) 3456-7890

 var str="(12) 3456-7890"; str.replace( /\D+/g, ''); 

Resultado: "1234567890"

Obs: sé que una cadena como esa no estará en el atributo, pero sea lo que sea, la solución es mejor, porque es más completa.

Y este es un fragmento que extrae los precios con la moneda y el formato:

 var price = "£1,739.12"; parseFloat(price.replace( /[^\d\.]*/g, '')); // 1739.12 

puedes usar un gran método parseInt

convertirá los dígitos iniciales a un número

 parseInt("-10px"); // will give you -10 

Para una cadena como #box2 , esto debería funcionar:

 var thenum = thestring.replace(/^.*(\d+).*$/i,'$1'); 

jsFiddle:

Con expresiones regulares , cómo obtener números de una cadena, por ejemplo:

 String myString = "my 2 first gifts were made by my 4 brothers"; myString = myString .replaceAll("\\D+",""); System.out.println("myString : " + myString); 

el resultado de myString es ” 24

Puede ver un ejemplo de este código de ejecución aquí: http://ideone.com/iOCf5G

Puedes usar expresiones regulares.

 var txt="some text 2"; var numb = txt.match(/\d/g); alert (numb); 

Eso alertará a 2.

Puede utilizar la Biblioteca de cadenas de subrayado como sigue

 var common="#box" var href="#box1" _(href).strRight(common) 

el resultado será: 1

Ver: https://github.com/epeli/underscore.string

MANIFESTACIÓN:
http://jsfiddle.net/abdennour/Vyqtt/
Código HTML :

 

img1 img2 img3 img4

Código JS:

 var comm="#box" $('a').click(function(){ $('div').html(_($(this).attr('href')).strRight(comm))}) 

si tiene el sufijo de la siguiente manera:

 href="box1az" 

Puede usar la próxima demostración:

http://jsfiddle.net/abdennour/Vyqtt/1/

 function retrieveNumber(all,prefix,suffix){ var left=_(all).strRight(prefix); return _(left).strLeft(suffix); } 

Aquí hay un solt. que no verifica datos

 var someStr = 'abc'; // add 123 to string to see inverse var thenum = someStr.match(/\d+/); if (thenum != null ) { console.log(thenum[0]); } else { console.log('no number'); } 

Use este código de una línea para obtener el primer número en una cadena sin obtener errores:

 var myInt = parseInt(myString.replace(/^[^0-9]+/, ''), 10); 

por favor, compruebe debajo de javaScripts, allí puede obtener solo el número

 var txt = "abc1234char5678#!9"; var str = txt.match(/\d+/g, "")+''; var s = str.split(',').join(''); alert(Number(s));