2012-01-06 130 views
0

我需要建立正则表达式的帮助。有一行Javascript:正则表达式如何?

navigator.userAgent.match(/Firefox\/3./) 

现在它只匹配Firefox 3.x.我需要的是一个表达式,它将匹配来自3rd的任何Firefox版本。意思是Firefox 3,4,5等。

欢迎任何建议!

+1

现在我认为用户代理测试是皱眉... – ChaosPandion 2012-01-06 02:08:39

回答

4

你不能做正确与正则表达式单独。

var m = navigator.userAgent.match(/Firefox\/(\d+)\./); 
if (m && m[1] > 3) { 
    // .... firefox 3 and above ... 
} 

注:至于为什么你不能只用正则表达式做正确,考虑火狐/ 10.0

+0

你可以这样做只是_anything_与正则表达式,但这并不是一个好主意。你通常最终会遇到怪物。 – paxdiablo 2012-01-06 02:16:00

+2

@paxdiablo:实际上,你不能用正则表达式解析非正则语法(尽管我承认,上述情况并非非正规)。然而,你可以用Perl6的递归正则表达式来做任何事情(但我们不是在这里讨论Perl)。 – slebetman 2012-01-06 02:23:04

+0

我认为这是最明智的解决方案,因为我不想限制FF9的检查。 – Yulia 2012-01-06 02:29:57

0

如果您正在使用jQuery我建议你看看:http://api.jquery.com/jQuery.browser/

+0

_您可能会建议,jQuery bods本身不会:“我们建议不要使用此属性;请尝试改为使用功能检测(请参阅jQuery.support)“。不过,这是一个很好的指针。 – paxdiablo 2012-01-06 02:12:28

+0

@paxdiablo是的,特征检测,不推荐,但对浏览器检测它是确定: _“因为$ .browser使用的navigator.userAgent确定平台,它是由用户或虚假陈述容易受到欺骗浏览器本身。最好尽可能避免使用特定于浏览器的代码。** ** $ .support属性可用于检测对特定功能的支持,而不是依赖于$ .browser **“ – denysonique 2012-01-06 04:48:16

0

这个怎么样,比如:

navigator.userAgent.match(/Firefox\/[3456789]./) 
+0

Nice,但与的速度,Mozilla基金会正在增加它的版本数,这会持续大约一个星期半,当V10抵达:-) – paxdiablo 2012-01-06 02:11:24

1
navigator.userAgent.match(/Firefox\/([3-9]|\d\d)./) 
+0

这是更好,但仍然无法与Firefox 100工作:-) – paxdiablo 2012-01-06 02:25:15

3
navigator.userAgent.match(/Firefox\/([3-9]|\d{2,})./) 
0
if(/Firefox\/([^012]|\d{2,})\./i.test(navigator.userAgent)){ 
    // What you want to do 
} 

因为你需要比赛,但你可以用正则表达式+一些代码做所有Firefox除了版本0,1和2.

+0

再次,这是很好的个位数的版本,但它会拒绝的Firefox火狐10. 9之后,将工作的第一个是火狐33.即使Mozilla的疯狂加速的版本号,这将需要一段时间:-) – paxdiablo 2012-01-06 03:10:52

+0

它不会拒绝10;加号是什么意思? – 2012-01-06 03:30:01

+0

您可能想要重新考虑该语句,“+”适用于之前的模式,即“[^ 012]”。换句话说,它将允许任何字符中的一个或多个不是0,1或2.因此,10将会失败,如11,12,...,32,40,41,42,1999999等等上。我可能是错的,这不会是第一次,但我不这么认为。 – paxdiablo 2012-01-06 03:31:48