2009-07-13 65 views
0

我正在构建一个'关键字'突出显示脚本,我需要编写一个正则表达式来解析以下URL,以找到搜索关键字来突出显示。正则表达式/ Javascript帮助 - 搜索URL术语解析

我真的很糟糕的正则表达式,所以我希望有人谁石头它,可以提供帮助。

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

网址示例:

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

有没有我可以使用,这将使我的集合,它看起来像这样一个正则表达式?

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

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

谢谢!任何帮助是极大的赞赏。

回答

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(","); 
} 
结合多个方面
+0

或https?:// [^ \?] +(?:\?| \?[^&] *&)skw =([^%] *)( ?:%2C \ + *(*))?忽略你的skw之前的任何参数 – cdm9002 2009-07-13 17:37:48

+0

谢谢!这工作很好! – 2009-07-13 19:00:51

1

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

+0

一个更紧凑的实现:http://magnetiq.com/2009/07/08/parsing- query-string-parameters-into-a-collection/ – 2009-07-13 17:42:04

2

你不能用一场比赛来做到这一点,但你可以用一场比赛,一场比赛和一场比赛来完成:

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

如果匹配失败(如果yur URL没有skw参数,可能需要单独进行匹配并保留)。

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

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