Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярка в ф-ии (https://javascript.ru/forum/misc/13013-regulyarka-v-f-ii.html)

infbyte 12.11.2010 17:30

Регулярка в ф-ии
 
<script type='text/javascript'>
function qwerty(A,B) { 
var reg=A; 
if (reg.exec(document.referrer)) { 
var reg=B; 
var arr=reg.exec(document.referrer); 
var str=arr[1];
str=decodeURIComponent(str);
var str=str.replace(reg=/\+/g, " ") ;

}
return str;
}
document.write(qwerty(/search\.qip\.ru/,/search\?query=(.+?)$/));
</script>



Почему не работает подскажите плиз.
Возможно с синтаксисом что-то намутил.

Без использования ф-ии все пахало

monolithed 12.11.2010 18:00

Какой результат вы пытаетесь получить?

infbyte 12.11.2010 18:02

Пользователь заходит на страничку с поисковика.
Скрипт смотрит реферрер и вырезает все что после query=
И выводит результат на экран.
кароче говорю, скрипт смотрит по какому запросу перешли на мой сайт.
Когда делал без функции - все работает.
Обернул код в функцию - перестало работать, вот думаю что проблемма в синтаксисе


Вот так работает:
<script type='text/javascript'>
 
var reg=/search\.qip\.ru/; 
if (reg.exec(document.referrer)) { 
var reg=/search\?query=(.+?)$/; 
var arr=reg.exec(document.referrer); 
var str=arr[1];
str=decodeURIComponent(str);
var str=str.replace(reg=/\+/g, " ") ;
document.write(str);
}
 

</script>

monolithed 12.11.2010 18:30

Зачем все так усложнят-то?
alert(document.referrer.replace(/.*query=(.*)/g, "$1"));

infbyte 12.11.2010 19:00

Цитата:

Сообщение от monolithed (Сообщение 78848)
Зачем все так усложнят-то?
alert(document.referrer.replace(/.*query=(.*)/g, "$1"));


Ну для проффи так легче а новичкам по строкам удобней как я :)


Если добавлю все что мне необходимо :

1)Нужно заменить плюсы на пробелы.
2)отобразить с какого поисковика перешли (var reg=/search\.qip\.ru/; ...так же будет с яндексом апортом гуглом майлом гуглом итд)
3)Привести текст в читаемый вид (decodeURIComponent)

то код опять получится из 5+ строк как в первом посте

Этот код нужно написать для 10 поисковиков.
получается 50 строк,вот я и хотел испоьзовать функцию.


Хотел узнать что не правильно в той функции написано,в плане синтаксиса.

infbyte 12.11.2010 19:21

Броузер вот такое возвращает при отладке:

Цитата:

JavaScript - http://test1.ru/

Uncaught exception: TypeError: 'reg.exec' is not a function
Error thrown at line 4, column 0 in qwerty(A, B) in http://test1.ru/:
if (reg.exec(document.referrer))
called from line 13, column 0 in http://test1.ru/:
document.write(qwerty('/search\.qip\.ru/','/search\?query=(.+?)$/'));
JavaScript - http://test1.ru/

Uncaught exception: TypeError: Cannot convert 'arr' to object
Error thrown at line 7, column 0 in qwerty(A, B) in http://test1.ru/:
var str=arr[1];
called from line 13, column 0 in http://test1.ru/:
document.write(qwerty(/search\.qip\.ru/,/search\?query=(.+?)$/));

monolithed 12.11.2010 19:45

Еще раз повторюсь, что нет необходимости в многострочном коде:


var str = decodeURIComponent("http://javascript.ru/php?query=http://ya.ru%2F%D0%BA%D0%B0%D0%BA-%D1%82%D0%BE%20%D1%82%D0%B0%D0%BA");
alert(str.replace(/.*query=(.*)/i, "$1").match(/http\:\/\/\w+\.\w+/i));


в итоге вам нужно:
document.referrer.replace(/.*query=(.*)/i, "$1").match(/http\:\/\/\w+\.\w+/i);


Часовой пояс GMT +3, время: 14:44.