簡體   English   中英

javascript正則表達式浮點數,以字符串結尾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM