2

我想获取当前页面的 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=", "");

但它只是将整个 page:env("caller") 分配给变量查询(例如http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=cats)。

编辑:jQuery 解决方案很可能也可以工作。

编辑2:@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;
   }
}

此外,我正在寻找一种更强大的方式来获取查询,因为谷歌有很多方法可以登陆搜索结果页面,其 URL 看起来不像http://www.google.com/search?q =猫。例如,去谷歌搜索猫只是给了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=结果的 URL 为1&fp=8ac6b4cea9b27ecb。我想我可以用正则表达式解析任何东西,虽然......

4

2 回答 2

5

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 显示的方式

于 2010-11-29T21:28:48.893 回答
4

这可以在 select 语句中使用正则表达式和捕获组 (()'s) 来完成。

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

正则表达式使 select 语句功能强大。一定要学习它们!是一个出色的正则表达式(或正则表达式)站点。

于 2010-11-29T21:14:50.330 回答