2009-08-10 7 views
0

У меня есть строка:Regex версия браузера матч

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, а не другие версии в строке. Я уже знаю, что браузер Firefox.

ответ

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

вернется 3.5.2 как весь матч (с помощью просмотра назад - который не доступен во всех регулярных выражениях ароматов, хотя, особенно JavaScript).

Итак, если это должен быть JavaScript, найдите Firefox/(\d+(?:\.\d+)+) и используйте совпадение №. 1.

Поскольку теоретически может быть более одной цифры (например, версия 3.10.0), я также изменил эту часть регулярного выражения, позволяя указать одну или несколько цифр для каждого номера. Кроме того, нет необходимости избегать косой черты.

+0

Теперь это не будет работать на' Firefox/46.0' –

+0

@JasonAxelson: Спасибо за замечая - в течение последних семи лет, схема присвоения имен для версий Firefox, похоже, изменилось ... –

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

и экстракт матч # 1, однако это делается в вашем (не указано, хотя один подозревает JavaScript) регулярные выражения. Или, если это очень раздражает, чтобы сделать, и ваше регулярное выражение поддерживает просмотр назад:

(?<=Firefox\/)[0-9]\.[0-9]\.[0-9] 
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 
+0

d'ой пропустил его, что много: P – rezzif

+0

Теперь это терпит неудачу на 'Firefox/46.0' –

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

Создать группу захвата вокруг цифр, как я сделал выше, с(). Тогда нужное вам регулярное выражение будет во втором индексе в возвращаемом массиве. например, для нулевых языков на основе matchedArray [1] языки и или 1 на основе его matchedArray [2]

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 

Кроме того, могут быть строки пользователя user-agent, содержащие только две цифры версии, такие как:

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-го уровня.