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

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

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

最佳答案

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

某处的某些代码正在编码 >> 首先(即作为 HTML 字符实体),然后对 & 符号和分号进行 URI 转义,留下 %26gt%3b 。哦!

FWIW,一个快速的“技巧”是首先转换 %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;& 作为 &amp; )也可能需要执行此操作。

关于javascript - 使用 JavaScript 正则表达式解析查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13662621/

相关文章:

symfony - 如何在 Symfony 中的 url query_string 中发送参数?

regex - 从Google Analytics(分析)中删除空查询字符串参数

javascript - Javascript 内存溢出 "+="

javascript - 使用 jquery 更改 Bootstrap 面板主体的背景颜色

python - 在 vs re.search python 中

regex - 为什么只有 ) 是一个特殊字符而不是 } 或 ]?

javascript - js函数从url获取文件名

javascript - 悬停事件在第一次调用时停止鼠标输入事件。

regex - 使用 RegEx 终止列表中的过滤器

http - 等号可以出现在查询参数中的第一个等号之后吗?