學習正則表達式,但這個讓我很頭疼。我需要匹配一個浮點數(要麼是.
要麼是,
作爲小數點),它必須以下列字符結尾:€/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