我正在构建一个'关键字'突出显示脚本,我需要编写一个正则表达式来解析以下网址,找到要搜索的关键字以突出显示。
我对正则表达式真的很糟糕,所以我希望有人能够帮助你。
我们的搜索字符串使用“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"
谢谢!非常感谢任何帮助。
答案 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(",");
}