我有一个字符串:

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

我只想让它回来 3.5.2 来自 Firefox 版本,而不是字符串中的其他版本。我已经知道浏览器是 Firefox。

有帮助吗?

解决方案

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

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

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

由于理论上可能有多个数字(例如版本 3.10.0),因此我还更改了正则表达式的该部分,允许每个数字包含一位或多位数字。另外,不需要转义斜杠。

其他提示

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

创建围绕号的捕获组像我与上述所做的()。然后你想要的正则表达式将在返回的数组中的第二个指数。 e.g用于基于零种语言matchedArray [1]和或1种基于语言其matchedArray [2]

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

和提取匹配#1,但是这是在你做(未指定,尽管有人怀疑的JavaScript)正则表达式引擎。或者,如果这是很烦人的事,和你的正则表达式回顾后支持:

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

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

有时候,用户代理还包含的字符,e.g:

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水平和数字> 10,而且允许在字符的第二或第三级别的任何版本号。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top