[英]javascript regex float number which ends with string
學習正則表達式,但這讓我頭疼。 我需要匹配一個浮點數(以.
或,
作為小數點),並且必須以以下字符結尾: €/g
。
有效匹配應為例如:
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
我想應該會起作用。
您確定要為此使用正則表達式嗎? 相反,利用可用的內置浮點解析可能會更容易:采用歐元符號之前的任何內容,將逗號規范化為小數(反之亦然,無論結果如何),然后嘗試使用Number
函數進行解析。 請注意,您需要檢查轉換是否與Number.isNaN函數一起使用。
另一種可能性是僅使用parseFloat函數。 由於它會忽略數字后面的任何字符,因此它將解析"40€
as 40.0
。但是,它可能不是您想要的,因為它也允許"40a"
和"40b"
類的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.