我有一个字符串:
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。
答案 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级的角色。