2009-07-13 60 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(',')