繁体   English   中英

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

[英]Using JavaScript Regular Expressions to Parse a 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”的值,以使上面的函数在提供的示例表达式上正常工作,或者提供一种万无一失的方法来从已编码的URL字符串的哈希中解析出键-值对?

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

某处的某些代码将>编码为> 首先 (即作为HTML字符实体),然后URI转换为&符号和分号,并留下%26gt%3b 卫生署!

FWIW,一个快速的“ hack”是先将%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

对于其他有问题的初始编码(例如< as &lt; & as &amp; ),也可能需要这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM