2017-08-04 8 views
1

私はtoLocaleStringの出力を取ろうとしており、少し余分な書式設定をしています。通貨記号を金額から切り離し、小数点記号とコンマを保持するにはどうすればよいですか?

$1,234.57 

悪くないが、様々な理由のために、私は$1の間にスペースを追加できるようにしたい、:currencyFormattedの値になる

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

:私はこのコードで開始しましたその周りにスパンをラップします。だから、所望の出力は次のようになります。

<span>$</span> 1,234.57 

だから私は、私はother answers on Stack Overflow由来このコード、コメントを追加しました:私は私の分割があったことを実現

<span>$</span> 1 

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

をしかし、私が得ましたカンマと小数点をテキストとして考え、そこで分割します。私はという/[^0-9\.]+/gのようないくつかの正規表現を試しましたが、ほとんど失敗したように見え、symbolSeparated[1]は未定義です。

いずれの場合でも、それは正規表現である必要はなく、関数の任意の組み合わせであっても何でもよい。質問は、小数点とカンマを保護しながら、通貨記号を数値から分ける方法はありますか?

通貨記号がの長さは1つの文字(そうでない場合、私はちょうどsubstring()を使用すること)であることが保証されていませんのでご注意ください。私が知る限り、これは1文字から3文字にすることができます。

また、jQueryに依存しない回答が優先されます。

答えて

2

これはあなたのためのトリックを行う必要があります。正規表現/^(\D*)(.*)/は、文字列の前にあるすべての非数字文字を検索し、最初に一致するグループに保存し、残りの文字列を2番目に一致するグループに入れます。 String.replace使用

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

ワンライナー、:

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