Парсинг 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 мощным. Обязательно учите их! Вот отличный сайт регулярных выражений (или регулярных выражений).

Другие вопросы по тегам