学习正则表达式,但这个让我很头疼。我需要匹配一个浮点数(要么是.
要么是,
作为小数点),它必须以下列字符结尾:€/g
。JavaScript正则表达式以字符串结尾的浮点数
有效的匹配应该是例如:
40€/g
43.33€/g
40,2€/g
40.2€/g
38.943€/g
欣赏帮助..
学习正则表达式,但这个让我很头疼。我需要匹配一个浮点数(要么是.
要么是,
作为小数点),它必须以下列字符结尾:€/g
。JavaScript正则表达式以字符串结尾的浮点数
有效的匹配应该是例如:
40€/g
43.33€/g
40,2€/g
40.2€/g
38.943€/g
欣赏帮助..
正则表达式看起来像:
\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)
\d+([.,]\d+)?€/g
应该工作,我猜。
你必须在正则表达式中转义'/',但是表达式看起来很好。 – 2012-07-24 11:59:17
作为我自己的一个规则,我从来没有像在语言中那样使用文字形式的正则表达式。这简化了很多,特别是对于Java(没有文字字符串)或PHP(你必须使用字符串*和*分隔符 - 疯狂)。我通常假设读者对这种语言有足够的了解,以便将正则表达式本身适用于他们正在使用的语言:-) – Joey 2012-07-24 12:16:02
*我通常假设读者已经足够了解该语言,从而使正则表达式本身适应它们所使用的语言使用* ...我希望它是如此:)然而,我喜欢你的态度......快乐的编码! – 2012-07-24 12:19:29
你确定你需要一个正则表达式吗?使用可用的内置浮点解析可能会更容易:在欧元符号之前采取任何措施,将逗号标准化为小数(反之亦然,无论结束工作),然后尝试使用Number
函数进行解析。请注意,您需要检查转换是否与Number.isNaN函数一起工作。
另一种可能性是只使用parseFloat函数。由于它会忽略数字后的任何字符,因此它会将"40€
解析为40.0
。但是,它可能不是你想要的,因为它也允许诸如"40a"
和"40b"
之类的东西。
到目前为止您尝试了哪些表情?你到底有什么问题? http://www.regular-expressions.info/是开始学习正则表达式的好地方。 – 2012-07-24 11:49:58
@TimPietzcker他说'.'或','为小数点,所以我认为不是:) – epoch 2012-07-24 11:50:32
你试过什么样的表情,出了什么问题?你有[演示我们可以玩](http://jsfiddle.net/)?帮助我们来帮助你。 – 2012-07-24 11:50:32