2013-10-09 34 views
0

分割查詢字符串,其中window.location.search是正則表達式來與本地JS

?foo=myFoo&fooAndBar=myFoo%26Bar;bar=myBar 

什麼正規表達式正確分割在其查詢分隔字符串?請注意,&符號(&)和分號(;)均爲valid separators

使用示例:

// slice() is used just to trim the leading "?" 
window.location.search.slice(1).split(/ _WORKING_REGEX_ /); 

>>> [object Array]: 

    [0] => "foo=myFoo", 
    [1] => "fooAndBar=myFoo&Bar", 
    [2] => "bar=myBar" 

我已經找到了正確的比賽爲&號,但不分號:

/&(?!\w+;)/ 

編輯: T.J. Crowder指出,我的錯誤是使用&的原始URL編碼作爲轉義的&符號,它將被正確編碼爲%26。鑑於這種情況,正確的正則表達式是非常容易搭配

window.location.search.slice(1).split(/[&;]/) 

原來這裏是測試URL我校正前發佈以供參考:

?foo=myFoo&fooAndBar=myFoo&Bar;bar=myBar 
+0

看起來不像任何這些解決方案涵蓋分號問。 –

回答

1

注意號(&)和分號( ;)都是有效的分隔符。

那麼,嗯:

var pairs = queryString.split(/[;&]/); 

或者,對付開頭的潛在?

var pairs = queryString.replace(/^\??/, '').split(/[;&]/); 
+0

@NathanWitt:'&'不代表查詢字符串中的&符號。僅限於HTML。 HTML!=查詢字符串,完全不同和不相關的符號。 –

+0

@TJ它並不打算這麼做,這就是爲什麼你的比賽會造成假陽性。 –

+0

[「foo = myFoo」,「fooAndBar = myFoo」,「amp」,「Bar」,「bar = myBar」] –