如何编写JavaScript正则表达式以将URI分隔为查询字符串变量,其中变量本身可能包含“&”字符?
我目前正在使用以下代码 - 但是如果任何变量包含&嵌入它不会捕获该变量的其余部分。怎么能减轻这种情况呢?
function uriParameters() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
答案 0 :(得分:2)
简单的问题:您对此有何期待?
a=b&c&d=e
是吗?
a=b&c, d=e //or
a=b , c , d=e
因此存在歧义,您的问题无法解决,如果您没有名称。
更新:如果查询字符串仅包含name=value
个对,并且没有单个name
参数,那么您可以通过以下脚本提取这些对:
function getUriParameters( uri ){
//Some sequence of chars that can't be matched in query string
var SYN = ",,,";
var vars = {};
uri.split("=")
.map(function(value){ //Replacing last '&' by SYN value
return value.replace(/&([^&]*)$/,SYN+'$1');
})
.join("=") //Restoring uri
.split(SYN) //
.forEach(function(v){ //Storing 'key=value' pairs
vars[v.split('=')[0]] = v.split('=')[1];
// key value
});
return vars;
}
//Usage-> getUriParameters("a=b&c&d=e")
//Sample
console.log( JSON.stringify(getUriParameters("a=b&c&d=e")) );
//output -> {"a":"b&c","d":"e"}
答案 1 :(得分:1)
&
是一个特殊字符,其目的是将url分解为多个变量。如果是值,则对其进行编码。
此外,我还要查看此答案以获取处理参数的完整函数:How can I get query string values in JavaScript?