如何将货币符号与货币值分开并保留小数和逗号?

时间:2017-08-04 05:13:59

标签: javascript

我正在尝试获取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 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:1)

单行,使用String.replace

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