web-dev-qa-db-fra.com

Javascript regex, remplace tous les caractères autres que des nombres

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, "")
19
Prakash Raman

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, "");
37
Andy E

\D signifie «pas chiffre»:

"a100.dfwe".replace(/\D/g, "")
18
Molecular Man

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"

3
user3324764

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+/.

1
fanaugen

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
0
Aaron Sherman