парсинг URL с регулярными выражениями и метод замены KRL - PullRequest
2 голосов
/ 29 ноября 2010

Я хочу взять 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 -

Выделенное утверждение, которое вы разместили, похоже, не работает. Я проверил это на 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 ]

5 голосов
/ 30 ноября 2010

2 способов выполнить то, что вы хотите.

1) В предварительном блоке

pre {
  queryInURL = page:url("query");
  q = queryInURL.replace(re/.*?q=(.*?)(?:$|&.*)/,"$1");
}
  • page: url ("запрос") получает всю строку параметров в URL
  • сделать замену строки для захвата определенного параметра запроса, который вы хотите

Полный пример протестированного приложения

Проверено на URL -> http://example.com/?q=cats&wow=cool

alt text

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 показал

4 голосов
/ 30 ноября 2010

Это можно сделать в операторе выбора с использованием регулярного выражения и группы захвата (()).

select when pageview "http://www.google.com/search.*(?:&|?)q=(\w+)(?:&|$)" setting(query)

Регулярные выражения делают предложение select мощным. Обязательно учите их! Здесь - отличный сайт регулярных выражений (или регулярных выражений).

...