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

时间:2012-12-01 18:53:56

标签: javascript regex query-string

目标是解析嵌入在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”和属性值“Test Fund.Feeder [A类]>> Morgan,Harry @ 1”。然而,正在发生的是正确解析属性名称和解析的值“Test:Fund.Feeder [A类]”。超出大于号(“>>”)的所有内容都会被此解析函数删除。

问题:你能否修改变量're'的值,使上面的函数在提供的样本表达式上正常工作,或者提供一种万无一失的方法来从一个散列中解析出键值对。编码的网址字符串?

1 个答案:

答案 0 :(得分:5)

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

某处的某些代码将>编码为> first (即作为HTML字符实体),然后URI转义符号和分号离开{{1 }}。卫生署!

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

>

可能需要针对其他有问题的初始编码(例如// original stuff var result = {}, queryString = queryString.substring(1), re = /([^&=]+)=([^&]*)/g, m; // hack queryString = queryString.replace(/%26gt%3b/g, "%3e"); // rest as normal <&lt;&)进行此操作。