我正在尝试获取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。
答案 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')