parseQueryString
by ariehg
JavaScript
function each(arr,fn){
var i,l;
for (i=0,l=arr.length;i<l;i++) fn(arr[i],i);
}
function parseQueryString(str,decodeKeys, decodeValues) {
if (decodeKeys == null) decodeKeys = true;
if (decodeValues == null) decodeValues = true;
var vars = str.split(/[&;]/),
object = {};
if (!vars.length) return object;
each(vars,function(val) {
var index = val.indexOf('=') + 1,
value = index ? val.substr(index) : '',
keys = index ? val.substr(0, index - 1).match(/([^\]\[]+|(\B)(?=\]))/g) : [val],
obj = object;
if (!keys) return;
if (decodeValues) value = decodeURIComponent(value);
keys.each(function(key, i) {
if (decodeKeys) key = decodeURIComponent(key);
var current = obj[key];
if (i < keys.length - 1) obj = obj[key] = current || {};
else if (typeOf(current) == 'array') current.push(value);
else obj[key] = current != null ? [current, value] : value;
});
});
return object;
}
console.log(parseQueryString("aaa=vvv&q=aaa&c=aa"));