正则表达式解析$和¢货币值

时间:2018-03-28 19:42:00

标签: javascript regex regex-lookarounds

我正在尝试解析使用$和¢格式的货币值。例如,我将拥有“$ 0.50”和“50¢”等值。 理想情况下,我会喜欢这两个值都会返回.50或0.50的表达式。

使用下面的表达式适用于$格式化值,但“50¢”将返回50(我将其解释为50美元)。

([0-9,.]+)

有什么想法吗?

5 个答案:

答案 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将货币字符串转换为具有属性dollarscents和方法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);