2017-09-06 140 views
-1

我需要从删除货币的字符串中提取金额。 例如正则表达式从字符串中获取金额没有货币符号

我想要的-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。 任何想法?

回答

1

看到了类似的问题,你需要匹配的减号。

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

-在开始后,?,使负号可选。

\$匹配一个美元符号,必须通过backslach \逃脱,因为美元符号在正则表达式中很重要。

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

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

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

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

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

在里面,\.表示需要单个小数。 A .必须使用反斜杠\转义,因为.通常会匹配任何字符。

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

这种方法可以防止像1.这样的值被匹配,因为小数点后面必须至少有一个数字。

+0

谢谢,但如果金额有这样的美元符号 - $ 5.95?我相信只有金额为-5.95 – valrecx

+0

@valrecx我已经更新了答案 – Soviut

+0

现在冷却我的问题是货币是动态的,有没有办法可以删除负数和数字之间的任何文本或字符? – valrecx

0

你的正则表达式只是检查一个数字,句点和另一个数字。你将不得不添加一个连字符的检查。

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

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

+0

感谢您的回应,我尝试了负面和正面,但如果中间有一个$符号,它不会提取它。 – valrecx

+0

请不要将答案用作评论/回复。如果你拿出“你有没有尝试”的部分,并用一个实际的正则表达式替换它会更好。 – Soviut

相关问题