2009-05-16 2 views
0

Я не могу понять этот код. Если это RegExp, можно ли это сделать проще? Или это уже широко совместимо? (С IE6 и более поздними версиями браузеров)Я не могу понять этот простой код JS

var u = navigator.userAgent; 

// Webkit - Safari 
    if(/webkit/i.test(u)){ 
// Gecko - Firefox, Opera 
    }else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){ 
    } 

Является ли это просто:

String.indexOf("webkit") 
+0

У меня также есть локальная переменная под названием "я". Является ли «i» в приведенном выше кодексе ссылкой на это? –

+1

i в '/ .../i' является модификатором без регистрозависимого регистра. – Gumbo

+0

Но это должно быть внутри строки. –

ответ

7

Сначала он ищет «webkit» (игнорируя регистр) в строке u, пытаясь определить, что браузер является Safari.

Если он не находит этого, он ищет «mozilla» (без «compati») или «opera» в попытке определить, что браузер Firefox или Opera. Опять же, поиски игнорируются в случае (/i).

EDIT

/.../i.test() код является регулярным выражением, они встроены в JavaScript.

+0

Тесный и пояснительный. Благодаря! –

3

тест() в JavaScript является регулярной функцией теста выражения. Вы можете подробнее узнать об этом here.

Этот метод проверяет соответствие регулярного выражения в строке, возвращая true, если выполнено успешно, и false, если нет. Метод тестирования может использоваться либо с строковым литералом, либо с строковой переменной.

Код:

rexp = /er/ 
if(rexp.test("the fisherman")) 
    document.write("It's true, I tell you.") 

Выход:

It's true, I tell you. 

Также here's другая большая страница, которая переходит в более подробно об этой функции.

Выполняет поиск соответствия между регулярным выражением и указанной строкой. Возвращает true или false.

0

Методическое тестирование тестов регулярных выражений для соответствия регулярного выражения в строке, при возврате истины в случае успеха и ложных, если нет.

этот код проверяет соответствие регулярных выражений 'webkit', 'mozilla' и т. Д. В строке в переменной u.

1

Вы, кажется, какой-то браузерный нюхательный код. Значение u связано с user agent identifier. И он протестирован с помощью регулярных выражений (построение с использованием RegExp literal syntax /expr/).

2

Это похоже, но возвращает имя и версию клиента для любого браузера.

window.navigator.sayswho= (function(){ 
    var N= navigator.appName, ua= navigator.userAgent, tem; 
    var M= ua.match(/(opera|chrome|safari|firefox|msie)\/? *(\.?\d+(\.\d+)*)/i); 
    if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; 
    M= M? [M[1], M[2]]: [N, navigator.appVersion, '-?']; 
    return M; 
})(); 

оповещения (navigator.sayswho)

+0

Не гарантируется правильное имя, просто имя, возвращаемое с объекта навигатора клиента. – kennebec

+0

Ницца! Может быть полезно. –

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