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

javascript regex float number which ends with string

本文关键字:字符串 结尾 正则表达式 浮点数 javascript      更新时间:2024-02-06

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

有效的匹配应该是例如:

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

感谢帮助。。

正则表达式看起来像:

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

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

/'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欧元/克这样的东西也有效,你可以使用:

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

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

请注意,这也将匹配像"word2€/g"这样的结构。如果要防止这种情况,请以(?<=^|'s)(如果前面有空格或字符串开头,则匹配)开头regex,然后以(?=$|'s)(如果后面有空格或串尾,则匹配匹配)结尾。

全吹版:

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

我想应该行得通。

你真的确定你需要一个正则表达式吗?相反,利用内置的浮点解析可能更容易:取欧元符号之前的任何内容,将逗号标准化为小数(反之亦然,最终有效的内容),然后尝试使用Number函数进行解析。请注意,您需要检查转换是否使用Number.isNaN函数。

另一种可能性是只使用parseFloat函数。由于它忽略了数字后面的任何字符,因此它将把"40€解析为40.0。然而,它可能不是您想要的,因为它还允许"40a""40b"之类的东西。