Si j'ai une chaîne comme "quelque chose de 12" ou "quelque chose de 102", comment pourrais-je utiliser une expression régulière en javascript pour renvoyer uniquement les nombres?
Expressions régulières:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
Cela renverrait un objet avec deux éléments à l'intérieur, '102' et '1948948'. Opérez comme vous le souhaitez. S'il ne correspond à aucun, il retournera null.
En supposant que vous ne traitiez pas de nombres décimaux complexes, cela devrait suffire, je suppose.
Vous pouvez également supprimer tous les caractères non numériques (\D
ou [^0-9]
):
let Word_With_Numbers = 'abc123c def4567hij89'
let Word_Without_Numbers = Word_With_Numbers.replace(/\D/g, '');
console.log(Word_Without_Numbers)
Pour les nombres avec fraction décimale et signe moins, j'utilise cet extrait:
var NUMERIC_REGEXP = /[-]{0,1}[\d]*[\.]{0,1}[\d]+/g;
'2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP)
// return ["2.2", "3.1", "4", "-7.6"]
Mise à jour: - 09/07/2018
Vous avez trouvé un outil qui vous permet de modifier visuellement une expression régulière: JavaScript Parser & Visualizer - Regular Expression JavaScript.
Mettre à jour:
En voici un autre avec lequel vous pouvez même déboguer une expression rationnelle: Testeur de regex en ligne et débogueur.
Mettre à jour:
Un autre: RegExr.
Mettre à jour:
Si vous voulez seulement des chiffres:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
Maintenant, vous obtenez les chiffres joints
Je suppose que vous voulez obtenir le (s) numéro (s) de la chaîne. Dans ce cas, vous pouvez utiliser les éléments suivants:
// Returns an array of numbers located in the string
function get_numbers(input) {
return input.match(/[0-9]+/g);
}
var first_test = get_numbers('something102');
var second_test = get_numbers('something102or12');
var third_test = get_numbers('no numbers here!');
alert(first_test); // [102]
alert(second_test); // [102,12]
alert(third_test); // null
var result = input.match(/\d+/g).join([])
Les réponses données ne correspondent pas vraiment à votre question, ce qui impliquait un nombre trailing. De plus, rappelez-vous que vous récupérez une ficelle; si vous avez besoin un nombre, transformez le résultat:
item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);
Si vous traitez avec des identifiants d'éléments numériques sur une page Web, votre code pourrait également accepter utilement une Element
, en extrayant le nombre de sa id
(ou son premier parent avec une id
); si vous avez un Event
pratique, vous pouvez probablement obtenir le Element
à partir de cela aussi.
La réponse # 3 de l'OMI à ce moment-ci de Chen Dachao est la bonne solution si vous souhaitez capturer tout type de nombre, mais l'expression régulière peut être abrégée:
/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g
à:
/-?\d*\.?\d+/g
Par exemple, ce code:
"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)
génère ce tableau:
["217","255","0","0","-0.8","-255","0","0","0","70.71"]
J'ai coupé un exemple de dégradé linéaire MDN afin qu'il teste complètement l'expression rationnelle et qu'il ne soit pas nécessaire de le faire défiler ici. Je pense avoir inclus toutes les possibilités en termes de nombres négatifs, de nombres décimaux, de suffixes d'unités comme deg et%, de virgules incohérentes et d'utilisation de l'espace, et des caractères points/points et tirets/tirets supplémentaires dans le texte "lin-grad.ient ". S'il vous plaît laissez-moi savoir si je manque quelque chose. La seule chose que je peux voir qu’il ne gère pas, c’est un nombre décimal mal formé, tel que "0..8".
Si vous voulez vraiment un tableau de nombres, vous pouvez convertir le tableau entier dans la même ligne de code:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
Mon code particulier, qui analyse les fonctions CSS, ne doit pas s'inquiéter de l'utilisation non numérique du caractère point/point. L'expression régulière peut donc être encore plus simple:
/-?[\d\.]+/g