2017-08-04 70 views
1

我試圖拿toLocaleString的輸出,並做了一些額外的格式。我開始使用此代碼:如何將貨幣符號與貨幣值分開並保留小數點和逗號?

displayAmount = 1234.56789 
currencyFormatted = displayAmount.toLocaleString('en-US', {style: 'currency', currency: 'USD'}); 

currencyFormatted的值變爲:

$1,234.57 

不壞,但由於種種原因,我希望能夠給$1之間添加一個空格,並圍繞它包圍一個跨度。因此,所需的輸出是:

<span>$</span> 1,234.57 

所以我加入這個代碼,這是我從other answers on Stack Overflow得出:

symbolSeparated = currencyFormatted.split(/(\d+)/).filter(Boolean); 
myElement.innerHTML = "<span>" + symbolSeparated[0] + "</span> " + symbolSeparated[1]; 

但是,我得到:

<span>$</span> 1 

我意識到我的分裂是考慮逗號和小數作爲文本,並在那裏分裂。我嘗試了一些其他的正則表達式,我found,如/[^0-9\.]+/g,但它似乎只是失敗,並且symbolSeparated[1]將是未定義的。

在任何情況下,它不一定是正則表達式,它可以是任何函數或任何組合。問題是,如何將貨幣符號與數值分開,同時保留小數點和逗號?

請注意,貨幣符號是保證是一個字符的長度(否則我可以只使用substring())。就我所知,它可以是1到3個字符。

此外,不依賴於jQuery的答案是首選。

回答

2

這應該對你有用。正則表達式/^(\D*)(.*)/查找字符串前面的所有非數字字符,並將其保存在第一個匹配組中,然後將字符串的其餘部分放入第二個匹配組中。

const regex = /^(\D*)(.*)/; 

function x() { 
    displayAmount = 1234.56789 
    currencyFormatted = displayAmount.toLocaleString('en-US', {style: 'currency', currency: 'USD'}); 


    m = regex.exec(currencyFormatted); 
    myElement.innerHTML = "<span>" + m[1] + "</span> " + m[2]; 
} 
+0

感謝您回覆。但我得到的結果是' $ 1234.57 $'。我不確定爲什麼美元符號會重複,但無論如何,這個正則表達式絕對正確嗎? – Questioner

+0

正則表達式本身很好。訪問匹配組時,我只是使用了錯誤的索引。我糾正了我的答案。正確的行是myElement.innerHTML =「」+ m [1] +「」+ m [2]; –

+0

現在很好用,謝謝!就這樣我清楚,'m [0]'是原始提供的字符串的完整副本嗎? – Questioner

1

一襯墊,使用String.replace

myElement.innerHTML = displayAmount.toLocaleString('en-US', {style: 'currency', currency: 'USD'}).replace(/^(\D*)(.*)/, '<span>$1</span> $2')