2013-07-23 3 views
2

Проблемы с RegExp в javascript. Я пытаюсь вернуть только номер версии и браузера название, т.е. «FireFox 22,0» или «MSIE 8.0»Использование regex для получения имени браузера

console.log(navigatorSaysWhat()) 

function navigatorSaysWhat() 
{ 
    var rexp = new RegExp(/(firefox|msie|chrome|safari)\s(\d+)(\.)(\d+)/i); 
    // works in ie but not in firefox 
    var userA = navigator.userAgent 
    var nav = userA.match(rexp); 
    return nav 
} 

Приведенное выше выражение не делает достаточно работы. Я пытаюсь сопоставить имя браузера и номер версии из строк.

Mozilla/5.0 (Windows NT 5.1; с.в.: 22,0) Gecko/20100101 Firefox/22,0 Mozilla/4.0 (совместимый; MSIE 8.0; Windows NT 5.1; Trident/4.0;

Я пробовал (светлячок | msie | chrome | safari) \ s (\ d +) (./\/) (\ d +) для соответствия обратной косой черты или (firefox | msie | chrome | safari) \ s (\ d +) (*) (\ d +) для любого характера, но без костей.

+1

Ваше название на самом деле не отражает вашу проблему. И на каком языке это (поскольку Regex-es сильно отличаются)? – Richard

ответ

5

Регулярные выражения чувствительны к регистру. Игнорировать регистр, добавляя (?i) или другие средства, предоставляемые регулярных выражений, который вы используете.

(?i)(firefox|msie|chrome|safari)[/\s]([\d.]+) 

Вот пример Python.

>>> agents = 'Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C' 
>>> [[m.group(1), m.group(2)] for m in re.finditer(r'(?i)(firefox|msie|chrome|safari)[\/\s]([\d.]+)', agents)] 
[['Firefox', '22.0'], ['MSIE', '8.0']] 

В Javascript:

var agents = 'Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C'; 
agents.match(/(firefox|msie|chrome|safari)[/\s]([\d.]+)/ig) 
=> ["Firefox/22.0", "MSIE 8.0"] 
+0

Извините, я наивно предположил, что выражения reg универсальны и поэтому не смогли упомянуть, что я работал в JavaScript. –

+0

@GhoulFool, Добавлена ​​версия Javascript. Проверьте это. – falsetru

+0

Это работает! Фантастика. спасибо –

Смежные вопросы