Cha*_*ker 2 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;
}
Run Code Online (Sandbox Code Playgroud)
对正则表达式一无所知,上面的're'变量对我来说毫无意义,但代码的结构才有意义.它一直工作得很完美,直到窒息以下表达式:
friendlySeriesName=Test%3A%20Fund.Feeder%20[class%20A]%20%26gt%3B%26gt%3B%20Morgan%2C%20Harry%20%40%201
Run Code Online (Sandbox Code Playgroud)
预期的行为是解析属性名称"friendlySeriesName"和属性值"Test Fund.Feeder [A类] >> Morgan,Harry @ 1".然而,正在发生的是正确解析属性名称和解析的值"Test:Fund.Feeder [A类]".超出大于号(">>")的所有内容都会被此解析函数删除.
问题:你能否修改变量're'的值,使上面的函数在提供的样本表达式上正常工作,或者提供一种从编码的url字符串的散列中解析出键值对的简单方法?
小智 5
问题不在于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
Run Code Online (Sandbox Code Playgroud)
这可能需要针对其他有问题的初始编码(例如<as as <和&as &)进行.
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |