565 votes

Comment extraire un nombre d'une chaîne de caractères en JavaScript ?

J'ai une chaîne de caractères en JavaScript (par ex. #box2 ) et je veux juste que le 2 d'elle.

J'ai essayé :

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

Il retourne toujours #box2 dans l'alerte, comment faire pour qu'elle fonctionne ?

Il doit pouvoir accueillir n'importe quel numéro de longueur attaché à l'extrémité.

1 votes

Vous pouvez simplement faire comme ceci . cela fonctionnera bien . var thestring = $(this).attr('href') ; var thenum = parsefloat(thestring) ; alert(thenum) ;

2 votes

Ce code fonctionne bien pour moi mais pour un cas, j'ai une chaîne de caractères '2.5/mile' et je veux en extraire 2.5. Le code ci-dessus me donne 25 au lieu de 2,5.

1 votes

867voto

georg Points 52691

Pour cet exemple spécifique,

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

dans le cas général :

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

Comme cette réponse a gagné en popularité pour une raison ou une autre, voici un bonus : le générateur de regex.

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: <code>' + re + '</code>';
}

<p>Hi, I'm Numex, the Number Extractor Oracle.
<p>What is your string? <input id="str" value="42abc"></p>
<p>What number do you want to extract? <input id="num" value="42"></p>
<p><button onclick="update()">Insert Coin</button></p>
<p id="re"></p>

23 votes

-1, "#box2_col3".replace( /^\D+/g, '') aurait dû montrer 2 no 2_col3 .

2 votes

@shiplu.mokadd.im : Je ne vois aucune référence à #box2_col3 dans la question.

2 votes

Oui, il n'y a pas de référence de #box2_col3 . Mais voyez la regex utilisée par OP ( \w)(.+$) )qui indique clairement qu'il y a d'autres caractères après le numéro.

335voto

Jason Marshall Points 171

Vous devriez essayer ce qui suit :

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

résultat

1234561613213213

3 votes

Bonne réponse, mais que se passe-t-il si je veux l'ensemble des chiffres séparément, c'est-à-dire 1234, 5616133...

3 votes

Ou une seule ligne + analyse syntaxique en entier : parseInt(txt.match(/\d/g).join(''), 10)

0 votes

" $ 20.0 ".match(/\d/g).join('') => "200" (juste pour dire)

172voto

user2903381 Points 121

Je pense que cette expression régulière répondra à votre besoin :

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

txt est votre chaîne.

Il arrache tout ce qui n'est pas un chiffre.

Je pense que vous pouvez obtenir la même chose en utilisant ceci aussi :

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

7 votes

/[^0-9]/g +1 pour la lisibilité. Également utilisé avec la plupart des réponses ici : stackoverflow.com/q/1862130/1066234

61voto

shiplu.mokadd.im Points 28895

Utilisation de la fonction de correspondance.

var thenum = "0a1bbb2".match(/\d+$/)[0];
console.log(thenum);

1 votes

Vous pouvez également ajouter le caractère unaire '+' pour en faire un nombre entier var thenum = +thestring.match(/) \d +$/)[0] ;

0 votes

Je suppose que cela ne fonctionne pas pour les nombres > à 1 chiffre ? (Je comprends que la question portait sur les nombres à 1 chiffre, mais je cherche des nombres possibles > 10).

0 votes

@nissemand Dont devinez . Essayez vous-même. Même toi, tu n'as pas vu le violon.

36voto

Paulo Roberto Points 634

J'ai essayé toutes les combinaisons citées ci-dessus avec ce code et l'a fait fonctionner, c'était le seul qui fonctionnait sur cette chaîne -> (12) 3456-7890

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

Résultat : "1234567890"

Obs : je sais qu'une chaîne comme celle-là ne sera pas sur l'attr mais peu importe, la solution est meilleure, car elle est plus complète.

0 votes

Je pense que le mieux sera str.match(/\d+/g).map(Number) il retournera un tableau

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X