2011-07-22 45 views
0

我有一個腳本,一個平後得到的輸出,輸出看起來是這樣的:解析信息從PING命令給JavaScript正則表達式

var input = "PING localhost (127.0.0.1) 56(84) bytes of data. 
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.065 ms 
64 bytes from localhost (127.0.0.1): icmp_req=2 ttl=64 time=0.073 ms 
64 bytes from localhost (127.0.0.1): icmp_req=3 ttl=64 time=0.065 ms 

--- localhost ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2000ms 
rtt min/avg/max/mdev = 0.065/0.067/0.073/0.010 ms" 

我第一次試圖讓到被髮送多少數據包。所以我嘗試了這個正則表達式:(\ d +)* \ spackets

基本上匹配的「NUMBER包」似乎在這個網站上工作:http://www.regular-expressions.info/javascriptexample.html但我不能複製它。

並使用正則表達式與之相匹配的時候,它也失敗了,就像這樣:

"42 packets".match('(\d+)*\spackets'); 

任何想法?

回答

3

的JavaScript正則表達式必須由正斜槓分隔符包圍來表示一個RegExp對象,而不是報價:

"42 packets".match(/(\d+)\spackets/); 

這是短期形式:

"42 packets".match(new RegExp('(\d+)\spackets')); 
+0

我明白了,謝謝!那麼通過匹配%或者「0.065/0.067/0.073/0.010」怎麼樣?「0%包丟失」? –

+0

如果你想使用引號,你可以使用'new RegExp(「pattern goes here」)'語法並跳過你的反斜槓。不是輸入正則表達式的最大方法,但它是可行的。 –

+0

'/(\ d +)%\ spacket loss /'爲第一個,'/(?:(\ d + \。\ d +)(?:\/| \ sms))+ /'號碼在一個單獨的組。 – Paulpro

2

match需要一個正則表達式對象,而不是一個字符串。

"42 packets".match(/(\d+)\spackets/); 

此外,你不需要* - \d+匹配一個或多個數字字符,所以尋找零個或多個羣的一個或多個整數是多餘的,你的情況*實際意義你可以有或更多組的一個或多個整數......這意味着,正如保羅指出的那樣,你可以單獨在packets上進行匹配。

+1

不只是多餘的;)這意味着他的正則表達式將匹配前面沒有數字的「數據包」。這可能不是他想要的:) – Paulpro

+0

@保羅 - 絕對正確。編輯:-) –