Je voudrais remplacer tous les caractères autres que 0-9 dans une chaîne, en utilisant Javascript.
Pourquoi cette expression rationnelle ne fonctionnerait-elle pas?
"a100.dfwe".replace(/([^0-9])+/i, "")
Vous avez besoin du modificateur /g
pour remplacer every occurrence:
"a100.dfwe".replace(/[^0-9]+/g, "");
J'ai également supprimé le modificateur redondant i
et les accolades de sous-expression de capture inutilisées pour vous. Comme d'autres l'ont déjà souligné, vous pouvez également utiliser \D
pour le raccourcir davantage:
"a100.dfwe".replace(/\D+/g, "");
\D
signifie «pas chiffre»:
"a100.dfwe".replace(/\D/g, "")
Qu'en est-il des nombres négatifs:
Utiliser l'exemple d'Andy E ne fonctionne que si vous avez un nombre négatif. Ensuite, le symbole "-" est supprimé, ce qui vous laisse un nombre toujours positif (ce qui peut être correct). Toutefois, si vous souhaitez conserver un nombre inférieur à 0, je vous suggère ce qui suit:
"a-100.dfwe".replace(/(?!-)[^0-9.]/g, "") //equals -100
Mais faites attention, car cela laissera tous les symboles '-', vous donnant une erreur si votre texte ressemble à "-a-100.dfwe"
Cela ne fonctionne pas car la classe de caractères [^0-9]
(= tout sauf les chiffres) avec le modificateur de répétition +
ne correspond à une séquence de caractères non numériques, telle que "aaa".
Pour ce faire, utilisez le modificateur /g
comme le suggèrent les autres (pour remplacer globalement toutes les correspondances). Vous pouvez également utiliser la classe de caractères prédéfinie \D
(= pas un chiffre) au lieu de [^0-9]
, ce qui donnerait une expression plus concise. /\D+/
.
Basé sur la réponse de @ user3324764 - Créez une fonction prototype et convertissez le nombre en nombre.
String.prototype.extractNumber = function ()
{
return Number(this.replace(/(?!-)[^0-9.]/g, ""));
};
Exemple:
"123.456px".extractNumber(); // 123.456