2011-04-01 105 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只刺数字和下划线。

希望这会有所帮助!

相关问题