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

Javascript 如何将货币符号与货币值分开,并保留小数和逗号?,javascript,Javascript,我正在尝试将的输出转换为LocaleString并对其进行一些额外的格式化。我从以下代码开始: displayAmount = 1234.56789 currencyFormatted = displayAmount.toLocaleString('en-US', {style: 'currency', currency: 'USD'}); currencyFormatted的值变为: $1,234.57 不错,但出于各种原因,我希望能够在$和1之间添加一个空格,并在其周围加上一个空格。因此

我正在尝试将
的输出转换为LocaleString
并对其进行一些额外的格式化。我从以下代码开始:

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

$1,234.57
不错,但出于各种原因,我希望能够在
$
1
之间添加一个空格,并在其周围加上一个空格。因此,期望的输出是:

<span>$</span> 1,234.57
1234.57美元
因此,我添加了这段代码,这段代码源自:

symbolSeparated=currencyFormatted.split(/(\d+/).filter(布尔值);
myElement.innerHTML=“+symbolSeparated[0]+”+symbolSeparated[1];
但是,我得到了:

<span>$</span> 1
1美元
我意识到我的拆分是将逗号和小数视为文本,并在那里拆分。我尝试了其他一些我喜欢的正则表达式,比如
/[^0-9\.]+/g
,但它似乎大部分都失败了,
符号分离[1]
将是未定义的

在任何情况下,它都不必是正则表达式,它可以是函数的任意组合或其他任何形式。问题是,如何在保留小数和逗号的同时将货币符号与数值分开?

请注意,货币符号的长度不能保证为一个字符(否则我只能使用
substring()
)。据我所知,它可以是1到3个字符


另外,不依赖于jQuery的答案是首选的。

这应该能帮到你。正则表达式
/^(\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];
}
const regex=/^(\D*)(.*)/;
函数x(){
显示金额=1234.56789
currencyFormatted=displayAmount.ToLocalString('en-US',{style:'currency',currency:'USD'});
m=regex.exec(currencyFormatted);
myElement.innerHTML=“+m[1]+”“+m[2];
}

一行,使用
字符串。更换

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

感谢您的回复。不过,我得到的结果是
$1234.57$
。我不知道为什么美元符号会重复出现,但无论如何,正则表达式肯定正确吗?正则表达式本身是正确的。我只是在访问匹配组时使用了错误的索引。我已经更正了我的答案。正确的行是myElement.innerHTML=“+m[1]+”“+m[2];现在效果很好,谢谢!我很清楚,
m[0]
将是最初提供的字符串的完整副本?
m[0]
将是完整匹配,在本例中是完整字符串。如果您的正则表达式只匹配原始字符串的一部分,那么
m[0]
将只是匹配的子字符串。
myElement.innerHTML = displayAmount.toLocaleString('en-US', {style: 'currency', currency: 'USD'}).replace(/^(\D*)(.*)/, '<span>$1</span> $2')