2011-01-30 140 views
5

我有以下代码:的Javascript正则表达式:替换最后一个点一个逗号

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

这个工作赫然我是多么希望它的工作。我只想要一个小小的此外,这是一样的东西:

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

然而,这段代码将替换第一次出现了“”在这里我要赶最后一个。任何帮助,将不胜感激。

回答

15

您可以用正则表达式做到这一点:

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

这正则表达式逗号紧跟匹配任何数量的文本不包括逗号。替换字符串只是一个句号,后面跟着原始最后一个逗号之后的字符。在字符串前面的其他逗号不会受到影响。

现在,如果您真的将转换为“欧式”格式的数字(因缺少更好的术语),您还需要担心“。”。在“美国风格”的数字会有逗号的地方使用字符。我想你可能只是想摆脱他们:

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

当您使用“.replace()”函数的字符串,你应该明白,它回报修改后的字符串。它不修改原然而,这样的声明,如:

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

对“X”的价值没有影响。

+0

一定要摆脱你的句点字符之前,你的逗号转换为一个,否则你会最终得到一个完全不同的数字!必须有一个正则表达式,只有在后面跟着一个逗号时才转换句点,并且只有在逗号前面加上逗号时才转换逗号。想想我刚刚在午餐时间里发现了我正在做的事情...... – RyanfaeScotland 2014-10-14 09:21:11

2

您可以使用lastIndexOf()函数来查找最后一次出现的,并将其替换。

另一种方法是使用正则表达式与线标记的末尾:

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

这是否工作?第一个','也会在某个地方结束。 – GolezTrol 2011-01-30 15:37:38

0

您不必担心它是否是最后一个“。”,因为只有一个。 JavaScript不使用逗号或点分隔的集合在内部存储数字。

+0

规则一是永不相信输入。所以我担心:)永远不要感谢你的答案。 – Shyam 2011-01-30 16:16:44

+0

输入无关紧要 - 您正在`String(parseFloat(n).toFixed(2))`的输出上运行`replace`,它将始终返回字符串表示形式,即'nil`或一个数字与单个十进制和零逗号。 JavaScript永远不会将数字转换为逗号分隔符的字符串,除非您专门编写了一种方法。 – coreyward 2011-01-30 18:51:43

1

您可以使用lastIndexOf查找,的最后一次发生。然后,您可以使用slice,之前和之后的部分连同.连在一起。

1

您可以使用正则表达式。你想要替换最后的',',所以基本的想法是替换之后没有','的','。

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

将返回你想要的:-)。

相关问题