javascript正则表达式浮点数,以字符串结尾

时间:2012-07-24 11:48:58

标签: javascript regex floating-point

学习正则表达式,但这个让我头疼。我需要匹配一个浮点数(.,作为小数点),它必须以下列字符结尾:€/g

有效匹配应为:

  • 40€/g
  • 43.33€/g
  • 40,2€/g
  • 40.2€/g
  • 38.943€/g

感谢帮助..

3 个答案:

答案 0 :(得分:6)

正则表达式将如下所示:

\d+(?:[.,]\d+)?€/g

在Javascript中,作为正则表达式对象(注意正斜杠需要转义):

/\d+(?:[.,]\d+)?€\/g/

以下是各部分的细分:

\d+  # one or more digits
(?:    # ... don't capture this group separately
 [.,] # decimal point
 \d+  # one or more digits
)?   # make the group optional
€/g  # fixed string to match

如果你想允许.123€/ g这样的东西也有效,你可以使用:

(?=[.,]|\d)(?:\d+)?(?:[.,]\d+)?€/g

也就是说,两个数字组都是可选的,但至少必须存在一个(这使用lookahead,这有点棘手)。

请注意,这也会匹配'word2€/ g'等结构。如果要阻止此操作,请使用(?<=^|\s)启动正则表达式(匹配前面有空格或字符串的开头)并以(?=$|\s)结束(匹配后跟空格或结尾字符串)。

完整版:

(?<=^|\s)(?=[.,]|\d)(?:\d+)?(?:[.,]\d+)?€/g(?=$|\s)

答案 1 :(得分:2)

\d+([.,]\d+)?€/g

应该有用,我想。

答案 2 :(得分:0)

你真的确定你需要一个正则表达式吗?可能更容易利用可用的内置浮点解析:取出欧元符号之前的任何内容,将逗号标准化为小数(反之亦然,无论结束工作),然后尝试使用{{1}解析它功能。请注意,您需要检查转换是否与Number.isNaN函数一起使用。

另一种可能性就是使用parseFloat函数。由于它会忽略数字后面的任何字符,因此会将Number解析为"40€。但是,它可能不是您想要的,因为它也允许40.0"40a"之类的内容。