web-dev-qa-db-fra.com

Obtenir les premiers entiers d'une chaîne avec JavaScript

J'ai une chaîne dans une boucle et pour chaque boucle, elle est remplie avec des textes ressemblant à ceci:

"123 hello everybody 4"
"4567 stuff is fun 67"
"12368 more stuff"

Je veux seulement récupérer les premiers nombres jusqu'au texte de la chaîne et, bien sûr, je ne connais pas la longueur.

Merci d'avance!

30
Fred

Si le nombre est au début de la chaîne:

("123 hello everybody 4").replace(/(^\d+)(.+$)/i,'$1'); //=> '123'

Si c'est quelque part dans la chaîne:

(" hello 123 everybody 4").replace( /(^.+)(\w\d+\w)(.+$)/i,'$2'); //=> '123'

Et pour un nombre entre caractères:

("hello123everybody 4").replace( /(^.+\D)(\d+)(\D.+$)/i,'$2'); //=> '123'

[ Addenda

Une expression régulière pour faire correspondre tous les nombres d'une chaîne:

"4567 stuff is fun4you 67".match(/^\d+|\d+\b|\d+(?=\w)/g); //=> ["4567", "4", "67"]

Vous pouvez mapper le tableau résultant à un tableau de nombres:

"4567 stuff is fun4you 67"
  .match(/^\d+|\d+\b|\d+(?=\w)/g)
  .map(function (v) {return +v;}); //=> [4567, 4, 67]

Y compris les flotteurs:

"4567 stuff is fun4you 2.12 67"
  .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g)
  .map(function (v) {return +v;}); //=> [4567, 4, 2.12, 67]

S'il est possible que la chaîne ne contienne aucun nombre, utilisez:

( "stuff is fun"
   .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || [] )
   .map(function (v) {return +v;}); //=> []

Donc, pour récupérer les numéros de début ou de fin de la chaîne 4567 stuff is fun4you 2.12 67" 

// start number
var startingNumber = ( "4567 stuff is fun4you 2.12 67"
  .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || [] )
  .map(function (v) {return +v;}).shift(); //=> 4567

// end number
var endingNumber = ( "4567 stuff is fun4you 2.12 67"
  .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || [] )
  .map(function (v) {return +v;}).pop(); //=> 67
49
KooiInc
var str = "some text and 856 numbers 2";
var match = str.match(/\d+/);
document.writeln(parseInt(match[0], 10));

Si les chaînes commencent par un nombre (précédé peut-être par un espace), la simple fonction parseInt(str, 10) suffit. parseInt ignorera les espaces. 

10 est nécessaire, sinon une chaîne telle que 08 sera convertie en 0 (parseInt dans la plupart des implémentations, considérons les nombres commençant par 0 comme octal).

43
Eugene Morozov

Si vous voulez un int, il suffit de parseInt(myString, 10). (Le 10 signifie la base 10; sinon, JavaScript peut essayer d'utiliser une base différente telle que 8 ou 16.)

5
Sophie Alpert

Utilisez des expressions régulières:

var re = new RegExp(/^\d+/); //starts with digit, one or more
var m = re.exec("4567 stuff is fun 67");
alert(m[0]); //4567

m = re.exec("stuff is fun 67");
alert(m); // null
2
Spikolynn

Thisreplacemethod avec une expression régulière simple ([^\d].*):

'123 your 1st string'.replace( /[^\d].*/, '' );
// output: "123"

enlever tout sans les premiers chiffres .

1
simhumileco