Regex 使用正则表达式和KRL'解析url;s替换法

Regex 使用正则表达式和KRL'解析url;s替换法,regex,krl,Regex,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

我想获取当前页面的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(“调用者”)分配给变量查询(例如)

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

编辑2:@JAM--

您发布的select语句似乎不起作用。我试了一下,它没有着火。不确定URL是否与pageview或什么不匹配(看起来应该与我匹配)

我将其放入的应用程序:

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;
   }
}
规则集a835x36{
元{
名称“regex testing2”
说明>
作者“”
登录
}
规则获取查询{
选择“查看页面时”http://www.google.com/search.*(?:&|?)q=(\w+(:&|$)”设置(查询)
通知(“查询”,查询),粘性=true;
}
}

另外,我正在寻找一种更可靠的方法来获取查询,因为谷歌有很多方法可以在搜索结果页面上找到看起来不像的URL。例如,在谷歌上搜索猫只会给出搜索结果的URL。我想我可以用正则表达式解析任何东西,不过…

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


正则表达式使select语句功能强大。一定要学会!是一个优秀的正则表达式(或正则表达式)站点。

2种方法可以实现您想要的功能

1) 在预块中

pre {
  queryInURL = page:url("query");
  q = queryInURL.replace(re/.*?q=(.*?)(?:$|&.*)/,"$1");
}
  • 页面:url(“查询”)获取url中的整个参数字符串
  • 执行字符串替换以捕获所需的特定查询参数
已测试完整示例应用程序

在url上测试->

规则集a60x439{
元{
名称“url查询测试”
说明>
作者“迈克·格雷斯”
登录
}
规则获取查询{
在页面查看时选择“*”
前{
queryInURL=页面:url(“查询”);
q=queryURL.replace(re/*?q=(.*?(:$|&.*)/,“$1”);
}
{
通知(“查询”,queryURL),粘性=真;
通知(“q”,q),粘性=真;
}
}
}

2) 在规则选择表达式中,JAM显示的方式

爱在哪里?我只是回答他们我希望他们如何回答谢谢你,迈克!我不知道page:url(“查询”),这很有帮助。很高兴它有帮助!祝你好运@autotravis,为您辩护,我修改了我的正则表达式,以修复您看到的问题,即q参数不是第一位的,但在完整的应用程序代码示例中也忘记了更改它。它现在已更改,您应该能够更新代码并看到它工作。@迈克,取消最后的评论。我刚刚用你的代码创建了一个新的bookmarklet,它确实有效。我错了!谢谢你的帮助!!由于您询问KRL,我们假设您希望在KNS服务器端进行处理。如果您想要jquery解决方案,我想已经有了一个带有jquery标记的答案。
pre {
  queryInURL = page:url("query");
  q = queryInURL.replace(re/.*?q=(.*?)(?:$|&.*)/,"$1");
}
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;
    }
  }

}