Почему так происходит

RedRabbit

Мой дом здесь!
Регистрация
11 Июл 2008
Сообщения
607
Реакции
256
Собственно простой скрипт. Мне нужно узнать, есть ли в url такой признак /index|head|sprite/. Но почему при выполнении выводит переменную h, а не true или false ?
Код:
var myRe = /index|head|sprite/ig;
var myArray = myRe.exec("http://www.site.net/images/index_01.jpg");
var i='index';
var h='head';
var s='sprite';
myRe == i || h || s;
 
потому что жизнь- это боль...

вообще, я вообще не понимаю что вы делаете. Нужно так
Код:
console.log(myArray[0]==i )
console.log(myArray[0]==h )
console.log(myArray[0]==s )
а сейчас идёт вообще лог выражение с 4-мя булевыми операциями
Код:
myRe == i || h || s;
(((myRe == i) || h )|| s);
false || h || s; // регулярка не равна строке
'header' || s //  лож или строка вернёт строку
'header' // строка ИЛИ строка вернёт первую строку
 
Код:
var myRe = /(index|head|sprite)/ig;
var myArray = myRe.exec("http://www.site.net/images/index_01.jpg");
alert (myArray[0]);
 
Я не понял вообще, что Вы неаписали:nezn::ah:
Я в JS не силен. Я толлько сегодня открыл учебник.
Мне нужно узнать, есть ли в url
index или head или sprite
и вернуть true или false. Помогите пожалуйста.
Я думал так:
Регулярным выражением найти index или head или sprite в url и сравнить с index или head или sprite. И вывести true при совпадении или false.
 
Регулярным выражением найти index или head или sprite в url и сравнить с index или head или sprite. И вывести true при совпадении или false.
да, примерно так вы и сделали.
myArray[0] - будет содержать найденное.
Код:
if(myArray[0]=='header'){

}elseif(myArray[0]=='index'){

}elseif(myArray[0]=='header'){


}else{
// ничего не нашли
}
 
Код:
var myRe = /(index|head|sprite)/ig;
var is = myRe.test("http://www.site.net/images/index_01.jpg");//в is true|false
Спасибо, вот так самое то.

Но мне не совсем понятно почему, такой код не работает? Или так нельзя сравнивать???
myRe индетично переменной i или h или s ? И должно быдет получиться true, но почему выводтся значение head?
Код:
var myRe = 'sprite';
var i='index';
var h='head';
var s='sprite';
myRe == i || h || s;
 
Но мне не совсем понятно почему, такой код не работает? Или так нельзя сравнивать???
Чуть выше KillDead пояснил.
Во-первых, в первом сообщении ты пытаешься сравнить myRe (саму регулярку), а не результат выполнения exec.

Во-вторых, значение выражения начинает выполняться слева направо. Т.е
Код:
myRe == i || h || s;
первая операция (myRe==i) выдаёт false
результат операции false || 'head' равен 'head' -
Результат операции 'head' || {что угодно} равен 'head'

Для просмотра ссылки Войди или Зарегистрируйся
 
Понятно. Но можно ли написать проще - короче, не используя if, если у меня сравнений 100? А то получится большая конструкция из if :) Загонять все переменные в массив и потом циклом сравнивать???
Это чисто мое любопытсво:)

Код:
var myRe = 'sprite';
var i='index';
var h='head';
var s='sprite';
var ...='....';
........
if(i=='header'){ }elseif(h=='index'){ }elseif(s=='header'){ }else{ };
 
Но можно ли написать проще - короче, не используя if, если у меня сравнений 100? А то получится большая конструкция из if :) Загонять все переменные в массив и потом циклом сравнивать???
Много if-ов, как правило, можно на switch заменить.
Для решения задачи из первого поста if-ы вообще не нужны (Для просмотра ссылки Войди или Зарегистрируйся)
А для поиска в массиве можно использовать функцию indexOf или Для просмотра ссылки Войди или Зарегистрируйся (часто бывает так, что JQuery уже используется на сайте)
Для просмотра ссылки Войди или Зарегистрируйся
В Jquery, например, есть Для просмотра ссылки Войди или Зарегистрируйся
 
Назад
Сверху