我正在尝试解析使用$和¢格式的货币值。例如,我将拥有“$ 0.50”和“50¢”等值。 理想情况下,我会喜欢这两个值都会返回.50或0.50的表达式。
使用下面的表达式适用于$格式化值,但“50¢”将返回50(我将其解释为50美元)。
([0-9,.]+)
有什么想法吗?
答案 0 :(得分:0)
最好分两步完成手术。在第一步中,您可以运行以下正则表达式:
\$\d+\.?,?\d+
这将返回所有$值,您可以按原样解释。然后,您可以运行以下命令:
\d+¢
这将返回所有美分,然后您可以除以100以获得所需的结果。
无论哪种方式,始终使用此fantastic regex testing tool。
答案 1 :(得分:0)
如果您使用:
```{r}
a <- 1
b <- 2
x <- a + b
```
`x` is equal to `r x`
然后返回的对象将包含以下信息(使用:r = /(\$?)([0-9,.]+)(¢?)/
调用):
r.exec('$0.50')
因此,在执行正则表达式后,您可以使用0:"$0.50"
1:"$"
2:"0.50"
3:""
提取值,然后检查2
以查看是否有美元,否则请检查1
以查看它是否为美分。< / p>
答案 2 :(得分:0)
我认为这项工作非常完美,reg [$¢]
将替换双括号和50¢
之间的任何特征,只需追加0.
a = "$0.50"
b = "0.50¢"
c = "0.50$"
d = "¢0.50"
e = "50¢"
console.log(a.replace(/[$¢]/,""))
console.log(b.replace(/[$¢]/,""))
console.log(c.replace(/[$¢]/,""))
console.log(d.replace(/[$¢]/,""))
console.log("0." + e.replace(/[$¢]/,""))
答案 3 :(得分:0)
你可以确保前置一个'。' (如果没有)到美分业务。
"50¢".replace(/(^[0-9]*¢$)/, ".$1")
0.50¢
"0.50¢".replace(/(^[0-9]*¢$)/, ".$1")
0.50¢
"$50".replace(/(^[0-9]*¢$)/, ".$1")
$ 50
答案 4 :(得分:0)
getCash
将货币字符串转换为具有属性dollars
,cents
和方法format
let a = "$0.50",
b = "50¢",
c = "$5.65",
d = "3.33";
function getCash(cash) {
let RemoveMoneyChars = (str) => str.replace(/\D/gmi, "");
obj = {
cents: 0,
dollars: 0,
format: function() {
if(this.dollars && this.cents) {
return `$${this.dollars}.${this.cents}`;
}
else if(this.dollars && !this.cents) {
return `$${this.dollars}`;
}
else if(!this.dollars && this.cents) {
return `.${this.cents}`;
}
}
};
if (cash.includes(".")) {
let dc = cash.split(".");
let dollars = dc[0], cents = dc[1];
dollars = RemoveMoneyChars(dollars);
cents = RemoveMoneyChars(cents);
obj.cents = parseInt(cents);
obj.dollars = parseInt(dollars);
}
else {
if (cash.slice(-1) === "¢") {
obj.cents = parseInt(RemoveMoneyChars(cash));
} else {
obj.dollars = parseInt(RemoveMoneyChars(cash));
}
}
return obj;
}
let money = getCash(a), money2 = getCash(b), money3 = getCash(c), money4 = getCash(d);
console.log(a, b, c, d);
console.log(".format()", money.format(), money2.format(), money3.format(), money4.format());
console.log(".dollars", money.dollars, money2.dollars, money3.dollars, money4.dollars);
console.log(".cents", money.cents, money2.cents, money3.cents, money4.cents);