2011-04-01 107 views
0

所以我正在工作一個JavaScript上下文檢測器。正則表達式第一次發生

它解析UA的一些常見的數據,如操作系統版本和瀏覽器版本。

它使用RegExp幾乎所有的東西。

像腳本檢測到Mac OS X版本:/(Intel|PPC) Mac OS X (.+)[\);]/

在將數據保存到一個對象,我會打電話給$

$.Mac應該是10_6_7而是它是10_6_7) AppleWebKit/534.24 (KHTML, like Gecko

完整的UA是Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.25 Safari/534.24

它總是使用最後發現;或),當我想要它找到;或者)在版本號之後。任何人都知道如何做到這一點?

+0

你使用jQuery嗎?它已經有了。 http://api.jquery.com/jQuery.browser/ – 2011-04-01 20:48:16

+1

WHYDOESEVERYONEUSEJQUERYFOREVERYTHING。 – Kayla 2011-04-01 20:50:20

+0

它不會工作。它沒有提供Chrome/Safari的真實版本號,也沒有OS數據。 – Kayla 2011-04-01 20:51:29

回答

3

使.+ nongreedy。

/(Intel|PPC) Mac OS X (.+?)[\);]/ 

前:

var str = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.25 Safari/534.24', 
    re = /(Intel|PPC) Mac OS X (.+)[\);]/; 

str.match(re); // ["Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko)", "Intel", "10_6_7) AppleWebKit/534.24 (KHTML, like Gecko"] 

後:

var re = /(Intel|PPC) Mac OS X (.+?)[\);]/; 

str.match(re): // ["Intel Mac OS X 10_6_7)", "Intel", "10_6_7"] 
+0

:D:D:D:D:D:D:D:D:D:D:D:D – Kayla 2011-04-01 20:45:41

+0

我更喜歡使用'reg.exec(str)'。 – Kayla 2011-04-01 20:52:54

1

或者,讓你的.+更具體:

/(Intel|PPC) OS X ([0-9_]+)/ 

應該做的伎倆,只要你能依靠你的版本號consi只刺數字和下劃線。

希望這會有所幫助!

相關問題