src/utils.js
function parseQS(qs, keys) {
	var index = qs.indexOf('?');
	var parsed = {};

	if (index !== -1) {
		var pairs = qs.substr(index + 1).split('&');
		var pair = [];

		for (var i = 0, c = pairs.length; i < c; i++) {
			pair = pairs[i].split('=');

			if((!isEmpty(pair[1])) && (!isEmpty(parseJSON(pair[1])))) {
				parsed[decodeForm(decodeURIComponent(pair[0]))] = parseJSON(decodeForm(decodeURIComponent(pair[1])));
			}
		}
	}

	return keys
		? pick(parsed, keys)
		: parsed;
}
function parseQS(qs, keys) {
	var index = qs.indexOf('?');
	var parsed = {};

	if (index !== -1) {
		var pairs = qs.substr(index + 1).split('&');
		var pair = [];

		for (var i = 0, c = pairs.length; i < c; i++) {
			pair = pairs[i].split('=');

			if((!isEmpty(pair[1])) && (!isEmpty(parseJSON(pair[1])))) {
				parsed[decodeForm(decodeURIComponent(pair[0]))] = parseJSON(decodeForm(decodeURIComponent(pair[1])));
			}
		}
	}

	return keys
		? pick(parsed, keys)
		: parsed;
}
function parseQS ( qs , keys ) { var index = qs . indexOf ( '?' ) ; var parsed = { } ; if ( index !== - 1 ) { var pairs = qs . substr ( index + 1 ) . split ( '&' ) ; var pair = [ ] ; for ( var i = 0 , c = pairs . length ; i < c ; i ++ ) { pair = pairs [ i ] . split ( '=' ) ; if ( ( ! isEmpty ( pair [ 1 ] ) ) && ( ! isEmpty ( parseJSON ( pair [ 1 ] ) ) ) ) { parsed [ decodeForm ( decodeURIComponent ( pair [ 0 ] ) ) ] = parseJSON ( decodeForm ( decodeURIComponent ( pair [ 1 ] ) ) ) ; } } } return keys ? pick ( parsed , keys ) : parsed ; }
Parse QS

@param {String} qs
@param {Array} [keys]
@returns {Object}
@private
Parse QS