2011-10-31 140 views
9

我想使用JavaScript來做一個URL(window.location.href)具有查詢字符串參數的正則表達式,並不知道如何做到這一點。在我的情況下,有一個查詢字符串參數可以重複自己;例如,「質量」,所以在這裏我想匹配「品質=」來獲得與4個值的數組(高大,皮膚黝黑,綠色的眼睛,帥):Javascript正則表達式多個匹配

http://www.acme.com/default.html?id=27&quality=tall&quality=dark&quality=green eyes&quality=handsome 
+1

這些參數是沒有意義的。 – Anders

回答

20

您可以使用正則表達式來做這個。

var qualityRegex = /(?:^|[&;])quality=([^&;]+)/g, 
    matches, 
    qualities = []; 

while (matches = qualityRegex.exec(window.location.search)) { 
    qualities.push(decodeURIComponent(matches[1])); 
} 

jsFiddle

質量將在qualities

+0

使用'window.location.search',而不是路徑名或href。 – kojiro

+0

@kojiro是啊,幾乎立即修復:) – alex

+0

*數量*定義在哪裏? :P – kojiro

-2

對於希望能夠匹配url中的非預定義參數名稱的人,@alex的答案略有差異。

var getUrlValue = function(name, url) { 
    var valuesRegex = new RegExp('(?:^|[&;])' + name + '=([^&;]+)', 'g'), 
     matches, 
     values = []; 

    while (matches = valuesRegex.exec(url)) { 
     values.push(decodeURIComponent(matches[1])); 
    } 

    return values; 
} 

var url = 'http://www.somedomain.com?id=12&names=bill&names=bob&names=sally'; 

// ["bill", "bob", "sally"] 
var results = getUrlValue('names', url); 

jsFiddle

+0

[此代碼解析查詢字符串時有許多問題](http://zzzzbov.com/blag/querystring-hell)。 – zzzzBov

+0

@zzzzBov代碼假設一個查詢字符串,其中參數以'?'開頭,每個都用'&'或';'(與指定的提交者相同的格式)分隔。處理你在博客文章中描述的許多邊緣案例不值得它添加的複雜性。當然,如果你想處理這些邊緣情況,jquery有一個功能可以將url解析爲一個對象,而不是用DOM實現你自己(像指定的asker一樣)。 –

+0

我的主要觀點是:不要重新發明輪子,使用正確的(或者至少大部分是正確的)庫。 – zzzzBov