2011-01-30 42 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"); 

將返回你想要的:-)。

相關問題