Соответствие версии браузера Regex
-
12-09-2019 - |
Вопрос
У меня есть строка:
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.
Решение
(?<=Firefox/)\d+(?:\.\d+)+
вернет 3.5.2 как полное совпадение (с использованием просмотра назад, который доступен не во всех вариантах регулярных выражений, особенно в JavaScript).
Итак, если это должен быть JavaScript, найдите Firefox/(\d+(?:\.\d+)+)
и используйте номер совпадения.1.
Поскольку теоретически может быть более одной цифры (скажем, версия 3.10.0), я также изменил эту часть регулярного выражения, разрешив использовать одну или несколько цифр для каждого числа.Кроме того, нет необходимости избегать косой черты.
Другие советы
Firefox\/([0-9]\.[0-9]\.[0-9])
Создайте группу захвата вокруг чисел, как я сделал выше с помощью ().Тогда нужное вам регулярное выражение будет находиться во втором индексе возвращаемого массива.например, для языков с нулевым индексом 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
Иногда пользовательский агент также содержит символы, например:
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-го уровня.