正则表达式/ Javascript帮助 - 搜索URL术语解析

时间:2009-07-13 17:19:13

标签: javascript regex parsing

我正在构建一个'关键字'突出显示脚本,我需要编写一个正则表达式来解析以下网址,找到要搜索的关键字以突出显示。

我对正则表达式真的很糟糕,所以我希望有人能够帮助你。

我们的搜索字符串使用“skw”作为参数,使用“%2c”(逗号)分隔术语,使用“+”表示空格。

示例网址:

http://[url].com/Search.aspx?skw=term1 http://[url].com/Search.aspx?skw=term1%2c+term2

我可以使用一个RegExp,它会给我一个看起来像这样的集合吗?

var "http://[url].com/Search.aspx?skw=term+one%2c+term2".match([Expression]);

matches[0] = "term one"
matches[1] = "term2"

谢谢!非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

你不能用一场比赛做到这一点,但你可以用匹配,替换和分割来做到这一点:

url.match(/\?(?:.*&)?skw=([^&]*)/)[1].replace(/\+/g, " ").split('%2c')

如果匹配失败,您可能希望单独进行匹配并进行挽救(如果您的URL没有skw参数,则可以进行挽救)。

你可能真的想要做一个unescape,来处理查询中的其他转义字符:

unescape(url.match(/\?(?:.*&)?skw=([^&]*)/)[1].replace(/\+/g, " ")).split(',')

答案 1 :(得分:1)

此任务并不适用于单个正则表达式。查看Parsing Query Strings in JavaScript以获取帮助您的脚本。

答案 2 :(得分:1)

https?://[^\?]+\?skw=([^%]*)(?:%2c\+*(.*))?

在javascript中,这是

var myregexp = /https?:\/\/[^\?]+(?:\?|\?[^&]*&)skw=([^%]*)(?:%2c\+*(.*))?/;
var match = myregexp.exec(subject);
if (match != null && match.length > 1) {
    var term1 = match[1];
    var term2 = match[2];
}

编辑:

抱歉,我重新阅读了您的问题,处理了将其与分割

结合使用所需的多个术语
var subject = "http://[url].com/Search.aspx?skw=term1+one%2c+term2";
var myregexp = /https?:\/\/[^\?]+(?:\?|\?[^&]*&)skw=([^&]*)?/;
var match = myregexp.exec(subject);
if (match != null && match.length > 1) {
  var terms = unescape(match[1]).split(",");
}