正则表达式从字符串中获取金额没有货币符号
问题描述:
我需要从删除货币的字符串中提取金额。 例如正则表达式从字符串中获取金额没有货币符号
我想要的-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。 任何想法?
答
看到了类似的问题,你需要匹配的减号。
-?\$[0-9]+[\.]*[0-9]*
的-
在开始后,?
,使负号可选。
\$
匹配一个美元符号,必须通过backslach \
逃脱,因为美元符号在正则表达式中很重要。
与您尝试使用正则表达式提取值相比,您可以在匹配价格后在美元符号上进行简单的字符串替换。
match(/-?\$[0-9]+[\.]*[0-9]*/).replace('$', '')
// -15.27
此外,你的十进制数表达式可以使用一些清理。
-?[0-9]+(\.[0-9]+)?
以上()?
是一个可选组。
在里面,\.
表示需要单个小数。 A .
必须使用反斜杠\
转义,因为.
通常会匹配任何字符。
接下来,一个或多个数字必须匹配。
这种方法可以防止像1.
这样的值被匹配,因为小数点后面必须至少有一个数字。
答
你的正则表达式只是检查一个数字,句点和另一个数字。你将不得不添加一个连字符的检查。
例如: -?[0-9]+[\.]*[0-9]*
您可以在How do I include negative decimal numbers in this regular expression?
谢谢,但如果金额有这样的美元符号 - $ 5.95?我相信只有金额为-5.95 – valrecx
@valrecx我已经更新了答案 – Soviut
现在冷却我的问题是货币是动态的,有没有办法可以删除负数和数字之间的任何文本或字符? – valrecx