Парсинг URL с регулярными выражениями и метод замены KRL
Я хочу взять URL текущей страницы (используя page:env("caller")) и извлечь его часть.
Например, я хочу взять
http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=cats
и назначить
cats
к переменной.
Как бы я сделал это с KRL?
я пытался
url = page:env("caller");
query = url.replace("http://www\.google\.com/search\?sourceid=chrome&ie=UTF-8&q=", "");
но он просто назначает всю страницу: env ("вызывающий") для запроса переменной (например, http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=cats).
Редактировать: решение jQuery, скорее всего, будет работать.
Edit2: @JAM -
Выражение select, которое вы разместили, похоже, не работает. Я проверил это на http://www.google.com/search?q=cats и оно не сработало. Не уверен, что URL не соответствует просмотру страницы или что-то (похоже, он должен соответствовать мне).
Приложение, в которое я положил его:
ruleset a835x36 {
meta {
name "regex testing2"
description <<
>>
author ""
logging on
}
rule get_query {
select when pageview "http://www.google.com/search.*(?:&|?)q=(\w+)(?:&|$)" setting(query)
notify("Query",query) with sticky = true;
}
}
Кроме того, я ищу более надежный способ получить запрос, поскольку у Google есть много способов попасть на страницу результатов поиска с URL-адресами, которые не будут выглядеть как http://www.google.com/search?q=cats Например, поиск в Google и поиск кошек только что дали http://www.google.com/webhp?hl=en#sclient=psy&hl=en&site=webhp&source=hp&q=cats&aq=f&aqi=&aql=&oq=&gs_rfai=&pbx=1&fp=8ac6b4cea9b27ecb для URL результатов. Я думаю, я мог бы разобрать все с помощью регулярного выражения, хотя...
2 ответа
2 способа выполнить то, что вы хотите.
1) В предварительном блоке
pre {
queryInURL = page:url("query");
q = queryInURL.replace(re/.*?q=(.*?)(?:$|&.*)/,"$1");
}
- page:url("query") захватывает всю строку параметров в URL
- сделать замену строки, чтобы захватить определенный параметр запроса, который вы хотите
Полный пример приложения протестирован
Протестировано на URL -> http://example.com/?q=cats&wow=cool
ruleset a60x439 {
meta {
name "url query test"
description <<
Getting the query from the current page URL
>>
author "Mike Grace"
logging on
}
rule get_query {
select when pageview ".*"
pre {
queryInURL = page:url("query");
q = queryInURL.replace(re/.*?q=(.*?)(?:$|&.*)/,"$1");
}
{
notify("Query",queryInURL) with sticky = true;
notify("q",q) with sticky = true;
}
}
}
2) В выражении выбора правил, как показал JAM
Это можно сделать в операторе select с помощью регулярного выражения и группы захвата (()).
select when pageview "http://www.google.com/search.*(?:&|?)q=(\w+)(?:&|$)" setting(query)
Регулярные выражения делают предложение select мощным. Обязательно учите их! Вот отличный сайт регулярных выражений (или регулярных выражений).