web-dev-qa-db-fra.com

Extraire ("get") un nombre d'une chaîne

J'ai une chaîne en javascript comme `# box2 'et je veux juste le' 2 '.

A essayé:

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

Il renvoie toujours # box2 dans l'alerte, comment puis-je le faire fonctionner?

Il doit s'adapter à n'importe quel numéro de longueur attaché à la fin.

306
user1022585

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"

Depuis que cette réponse a gagné en popularité pour une raison quelconque, 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>
514
georg

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
197
Jason Marshall

Je pense que cette expression régulière servira votre but:

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

txt est votre chaîne.

Il déchire essentiellement tout ce qui n’est pas un chiffre.

Je pense que vous pouvez réaliser la même chose en utilisant ceci aussi:

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

Utilisation de la fonction de correspondance.

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

jsfiddle

53
Shiplu Mokaddim

Essayez ce qui suit: string.replace(/[^0-9]/g, ''); Ceci supprimera tous les caractères non numériques, ne laissant que des chiffres dans la chaîne.

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, ''));
51
xbalaji

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

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

Résultat:"1234567890"

Obs: Je sais qu’une telle chaîne ne sera pas attirante, mais peu importe, la solution est meilleure car elle est plus complète.

32
Paulo Roberto Rosa

Et ceci est un extrait qui extrait les prix avec la devise et le formatage:

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

vous pouvez utiliser la méthode parseInt

il convertira les premiers chiffres en un nombre

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

Pour une chaîne telle que #box2, cela devrait fonctionner:

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

jsFiddle:

8
icyrock.com

Avec Expressions régulières , comment obtenir des nombres à partir d'une chaîne, par exemple:

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

le résultat de myString est "24"

vous pouvez voir un exemple de ce code courant ici: http://ideone.com/iOCf5G

6
Jorgesys

Vous pouvez utiliser une expression régulière.

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

Cela va alerter 2.

5
Robby Shaw

Vous pouvez utiliser Underscore String Library comme suit

var common="#box"
var href="#box1"

_(href).strRight(common)

le résultat sera: 1

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

DEMO:
http://jsfiddle.net/abdennour/Vyqtt/
Code HTML:

<p>
    <a href="#box1" >img1</a>
    <a href="#box2" >img2</a>
    <a href="#box3" >img3</a>
    <a href="#box4" >img4</a>
</p>
<div style="font-size:30px"></div>

Code JS:

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

si vous avez le suffixe suivant:

href="box1az" 

Vous pouvez utiliser la prochaine démo:

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

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

}
4
Abdennour TOUMI

Utilisez ce code d’une ligne pour obtenir le premier nombre d’une chaîne sans erreur:

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

Voici un solt. qui vérifie l'absence de données

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');
}
3
Gene Bo

s'il vous plaît vérifier ci-dessous javaScripts, là vous pouvez obtenir que le numéro

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

sortie: 1234567789

2
Thilina Sampath
var elValue     = "-12,erer3  4,-990.234sdsd";

var isNegetive = false;
if(elValue.indexOf("-")==0) isNegetive=true;

elValue     = elValue.replace( /[^\d\.]*/g, '');
elValue     = isNaN(Number(elValue)) ? 0 : Number(elValue);

if(isNegetive) elValue = 0 - elValue;

alert(elValue); //-1234990.234
2
Manoj Chavanke