Вот один, который я использую:
var params = {};
window.location.search.substring(1).split('&').forEach(function(pair) {
pair = pair.split('=');
if (pair[1] !== undefined) {
var key = decodeURIComponent(pair[0]),
val = decodeURIComponent(pair[1]),
val = val ? val.replace(/\++/g,' ').trim() : '';
if (key.length === 0) {
return;
}
if (params[key] === undefined) {
params[key] = val;
}
else {
if ("function" !== typeof params[key].push) {
params[key] = [params[key]];
}
params[key].push(val);
}
}
});
console.log(params);
Основное использование, например.
?a=aa&b=bb
Object {a: "aa", b: "bb"}
Дублирующиеся параметры, например.
?a=aa&b=bb&c=cc&c=potato
Object {a: "aa", b: "bb", c: ["cc","potato"]}
Отсутствующие ключи, например.
?a=aa&b=bb&=cc
Object {a: "aa", b: "bb"}
Пропущенные значения, например.
?a=aa&b=bb&c
Object {a: "aa", b: "bb"}
Приведенные выше решения JSON / regex генерируют синтаксическую ошибку в этом дурацком URL:
?a=aa&b=bb&c=&=dd&e
Object {a: "aa", b: "bb", c: ""}