5 votes

Javascript Regex : remplacer le dernier point par une virgule

J'ai le code suivant :

var x = "100.007"
x = String(parseFloat(x).toFixed(2));
return x
=> 100.01

Ce système fonctionne à merveille, exactement comme je le souhaite. Je voudrais juste un petit ajout, qui serait quelque chose comme.. :

var x = "100,007"
x.replace(",", ".")
x.replace
x = String(parseFloat(x).toFixed(2));
x.replace(".", ",")
return x
=> 100,01

Cependant, ce code remplacera la première occurrence du ",", alors que je veux attraper la dernière. Toute aide serait appréciée.

15voto

Pointy Points 172438

Vous pouvez le faire à l'aide d'une expression régulière :

x = x.replace(/,([^,]*)$/, ".$1");

Cette expression régulière correspond à une virgule suivie de n'importe quelle quantité de texte ne comprenant pas de virgule. La chaîne de remplacement est juste un point suivi de ce qui se trouve après la dernière virgule d'origine. Les autres virgules qui la précèdent dans la chaîne ne sont pas affectées.

Maintenant, si vous convertissez vraiment des nombres formatés en "style européen" (à défaut d'un meilleur terme), vous devrez également vous préoccuper des caractères "." aux endroits où un nombre en "style américain" comporterait des virgules. Je pense que vous voudrez probablement vous en débarrasser :

x = x.replace(/\./g, '');

Lorsque vous utilisez la fonction ".replace()" sur une chaîne de caractères, vous devez comprendre qu'elle retours la chaîne modifiée. Il ne modifie pas la original Cependant, une déclaration telle que :

x.replace(/something/, "something else");

n'a aucun effet sur la valeur de "x".

2voto

Miky Dinescu Points 22380

Vous pouvez le faire en utilisant la fonction dernierIndexF() pour trouver la dernière occurrence du , et le remplacer.

L'autre solution consiste à utiliser une expression régulière avec le marqueur de fin de ligne :

myOldString.replace(/,([^,]*)$/, ".$1");

2voto

p4bl0 Points 2583

Vous pouvez utiliser une expression rationnelle. Vous voulez remplacer le dernier ',', donc l'idée de base est de remplacer les ',' pour lesquels il n'y a pas de ',' après.

x.replace(/,([^,]*)$/, ".$1");

Il vous rendra ce que vous voulez :-).

1voto

GolezTrol Points 54531

Vous pouvez utiliser lastIndexOf pour trouver la dernière occurrence de , . Vous pouvez alors utiliser slice pour mettre la partie avant et après le , avec un . entre les deux.

0voto

coreyward Points 26109

Vous n'avez pas à vous soucier de savoir s'il s'agit du dernier ".", car il n'y en a qu'un seul. JavaScript ne stocke pas les nombres en interne avec des ensembles délimités par des virgules ou des points.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X