0

我有一个字符串:

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)

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

我目前的正则表达式是:

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

它返回Firefox/3.5.2

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

4

5 回答 5

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

将返回 3.5.2 作为整个匹配项(使用lookbehind - 现在大多数浏览器都支持)。

如果您的 JavaScript 引擎仍然不支持此功能(查看 2022 年 2 月的 Safari),请搜索/Firefox\/(\d+(?:\.\d+)+)/并使用匹配号。1.

由于理论上可能有多个数字(例如,版本 3.10.0),我还更改了正则表达式的那部分,允许每个数字使用一个或多个数字。

于 2009-08-10T06:47:25.617 回答
2
Firefox\/(\d+(?:\.\d+)+)

围绕数字创建一个捕获组,就像我在上面使用(...<code>) 所做的那样。然后你想要的正则表达式将在返回的数组的第二个索引中。例如,对于具有从零开始的列表的语言matchedArray[1],以及对于具有从 1 开始的列表的语言,matchedArray[2]

于 2009-08-10T06:37:48.290 回答
1

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

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 的任何版本号,但也允许第 2 或第 3 级中的字符。

于 2011-01-08T08:53:03.377 回答
1
Firefox\/(\d+(?:\.\d+)+)

并提取匹配#1。但是,这是在您的(未指定,虽然有人怀疑是 JavaScript)正则表达式引擎中完成的。或者,如果这样做很烦人,并且您的正则表达式引擎支持后向搜索:

(?<=Firefox\/)\d+(?:\.\d+)+
于 2009-08-10T06:36:54.033 回答
1
Firefox\/(\d+(?:\.\d+)+)

根据您的语言(我假设是 JS),它将是数组中的第二个元素,即

const regex = /Firefox\/(\d+(?:\.\d+)+)/;
const matches = useragent.match(regex);

console.log(matches[1]); // "3.5.2"
于 2009-08-10T06:36:56.387 回答