正则表达式浏览器版本匹配

时间:2009-08-10 06:30:58

标签: regex browser user-agent

我有一个字符串:

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)

我想知道字符串(3.5.2)中的Firefox版本。

我现在的正则表达式是:

Firefox\/[0-9]\.[0-9]\.[0-9]

然后返回Firefox/3.5.2

我只希望它从Firefox版本返回3.5.2,而不是字符串中的其他版本。我已经知道浏览器是Firefox。

5 个答案:

答案 0 :(得分:3)

(?<=Firefox/)\d+(?:\.\d+)+

将返回3.5.2作为整个匹配(使用lookbehind - 虽然在所有正则表达式中都不可用,尤其是JavaScript)。

因此,如果必须是JavaScript,请搜索Firefox/(\d+(?:\.\d+)+)并使用匹配号。 1。

由于理论上可能有多个数字(例如,版本3.10.0),我也改变了正则表达式的那一部分,允许每个数字的一​​个或多个数字。此外,没有必要逃避斜线。

答案 1 :(得分:2)

Firefox\/([0-9]\.[0-9]\.[0-9])

围绕数字创建一个捕获组,就像我上面用()所做的那样。然后你想要的正则表达式将在返回的数组的第二个索引中。例如,对于基于零的语言匹配的阵列[1]和或者基于1的语言,其匹配的阵列[2]

答案 2 :(得分:1)

Firefox\/([0-9]\.[0-9]\.[0-9])

并提取匹配#1,但这是在您的(未指定的,但有一个怀疑JavaScript)正则表达式引擎中完成的。或者,如果这非常烦人,并且你的正则表达式支持lookbehind:

(?<=Firefox\/)[0-9]\.[0-9]\.[0-9]

答案 3 :(得分:1)


Firefox\/([0-9]\.[0-9]\.[0-9])

取决于你的语言(我假设是js),它将是数组中的第二个元素


var regex = /Firefox\/([0-9]\.[0-9]\.[0-9])/
var matches = useragent.match(regex);
alert(matches[1]); // 3.5.2

答案 4 :(得分:0)

有时用户代理也包含字符,例如:

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b9pre) Gecko/20101228 Firefox/4.0b9pre

Internet Explorer是我见过这些字符作为版本信息的一部分的唯一其他浏览器:

Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0 ; .NET CLR 2.0.50215; SL Commerce Client v1.0; Tablet PC 2.0

此外,Firefox用户代理字符串只有两个版本数字,如下所示:

Mozilla/5.0 (X11; U; Linux armv7l; en-US; rv:1.9.2a1pre) Gecko/20091127 Firefox/3.5 Maemo Browser 1.5.6 RX-51 N900

基于此,我想出了这个正则表达式模式:

Firefox\/([\d]+\.[\w]?\.?[\w]+) 

它将匹配任何版本号,2-3个级别和数字&gt; 10但也允许2级或3级的角色。