使用JavaScript正则表达式解析查询字符串

使用JavaScript正则表达式解析查询字符串,javascript,regex,query-string,Javascript,Regex,Query String,目标是解析出嵌入URL哈希部分的参数。StackOverflow社区的某个人提供了以下代码作为对类似问题的回答。社区选择此代码作为合适的答案,因此将其整合到我自己的代码中,如下所示: Utils.parseQueryStringArgs=function(queryString){ var result = {}, queryString = queryString.substring(1), re = /([^&=]+)=([^&]*)/g, m;

目标是解析出嵌入URL哈希部分的参数。StackOverflow社区的某个人提供了以下代码作为对类似问题的回答。社区选择此代码作为合适的答案,因此将其整合到我自己的代码中,如下所示:

Utils.parseQueryStringArgs=function(queryString){
    var result = {}, queryString = queryString.substring(1),
        re = /([^&=]+)=([^&]*)/g, m;

    while (m = re.exec(queryString)) {
            result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
    }

    return result;
}
由于对正则表达式一无所知,上面的're'变量对我来说毫无意义,但代码的结构还是有意义的。它的工作完美无瑕,直到被以下表达式窒息:

friendlySeriesName=Test%3A%20Fund.Feeder%20[class%20A]%20%26gt%3B%26gt%3B%20Morgan%2C%20Harry%20%40%201
预期的行为是解析出一个属性名“friendlySeriesName”和一个属性值“TestFund.Feeder[class a]>>Morgan,Harry@1”。然而,正在发生的是对属性名称和解析值“Test:Fund.Feeder[class a]”的正确解析。此解析函数将删除大于号(“>>”)以外的所有内容


问题:您能否修改变量“re”的值,使上述函数在提供的示例表达式上正常工作,或者提供一种简单的方法从编码url字符串的哈希中解析出键值对?

问题不在于JavaScript代码。问题在于查询字符串中提供的值

某个地方的某些代码首先将
编码为
(即作为HTML字符实体),然后URI转义符号和分号,留下
%26gt%3b
。啊

FWIW,一个快速的“黑客”是首先将
%26gt%3b
转换为
%3e
(或
):


对于其他有问题的初始编码,可能需要这样做(例如,
我强烈建议不要使用该代码来解析查询字符串。
?foo=bar&foo=baz
的查询字符串应解析为
['bar',baz']
。可以正确解析URI和查询字符串。您的诊断是正确的。输入被编码了两次。
// original stuff
var result = {}, queryString = queryString.substring(1),
    re = /([^&=]+)=([^&]*)/g, m;
// hack
queryString = queryString.replace(/%26gt%3b/g, "%3e");
// rest as normal