正则表达式从没有货币符号的字符串获取金额

时间:2017-09-06 00:19:31

标签: regex

我需要从删除货币的字符串中提取金额。 e.g。

我想要输出-5.95或6.85

The quick brown fox jumps over the lazy -$5.95 dog. 
The quick brown fox jumps over the lazy $6.85 dog.

意味着应该接受正数或负数,但删除$符号。

我使用这种模式

([0-9]+[\.]*[0-9]*)
然而,它只获得正数。 - 5.95美元被提取为5.95。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您需要匹配减号。

-?\$[0-9]+[\.]*[0-9]*

开头?之后的-使减号符号可选。

\$匹配一个美元符号,必须使用反向跟踪\进行转义,因为正则表达式中的美元符号很重要。

您可以在与价格匹配后在美元符号上执行简单的字符串替换,而不是尝试使用正则表达式来提取值。

match(/-?\$[0-9]+[\.]*[0-9]*/).replace('$', '')
// -15.27

此外,您的十进制数表达式可以使用一些清理。

-?[0-9]+(\.[0-9]+)?

以上( )?是一个可选组。

在其中,\.表示需要一个小数。必须使用反斜杠.\进行转义,因为.通常会匹配任何字符。

接下来,必须匹配一个或多个数字。

此方法可防止匹配1.之类的值,因为小数必须后跟至少一个数字。

答案 1 :(得分:0)

您的正则表达式只检查数字,句号和其他数字。你必须添加一个连字符的检查。

例如: -?[0-9]+[\.]*[0-9]*

您可以在How do I include negative decimal numbers in this regular expression?

看到类似的问题