2012-11-12 52 views
7

我正在嘗試爲JSON中的數字編寫字符串的正則表達式。我仍然是新手撰寫正則表達式,我發現JSON號碼機器的圖表 here,但我不知道如何攻擊它。JSON數字正則表達式

下面是一些應該由正則表達式找到的字符串。 「22」, 「55.75466」, 「-44.565」 「55e-2」 「69234.2423432 E78」 任何幫助表示讚賞!

+1

你或許應該解釋一下你的「這是JSON數字的字符串」的意思,最好舉一個例子。 「JSON號碼」也有點令人費解。 –

+2

根據json.org你的最後一個例子不應該被視爲一個數字,由於空間。 –

回答

16

僅供參考,這裏的 「數字」 圖從http://www.json.org/fatfree.html

JSON number

應該匹配,這是正則表達式:

-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)? 
+0

可以,或者有人向我解釋你是如何得到答案的? –

+2

我只是按照從左到右的方式來繪製圖表。例如,首先你選擇下去遇到'-',或者直接跳過'-'。在正則表達式中,這可以表示爲「 - ?」,或者「零個或一個」 - 「s」。然後,路徑再次在'0'和以'1'開始的一系列數字之間分開(以防止像'0123'這樣的數字,因爲JSON不支持八進制)。在正則表達式中,這可以用「交替」來表示,看起來像這樣:''(?:xxx | yyy)''其中'xxx'和'yyy'是可能的「路徑」。等等。如果您需要對正則表達式進行更深入的解釋,請告訴我們。 –

+0

neg符號「 - 」本身是根據您的正則表達式的有效json數字。不會彈起 – drgs

1

acheong87的答案應該提供您需要的正則表達式。但是,如果你只是想檢查一個字符串通過JSON返回「是一個數字」,那麼你可以這樣做:

var valueAsString = "55e-2"; 
var isANumber = !isNaN(valueAsString);