Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';s一个正则表达式,用于中断变量可能包含'&';?_Javascript_Regex_Web - Fatal编程技术网

Javascript 什么';s一个正则表达式,用于中断变量可能包含'&';?

Javascript 什么';s一个正则表达式,用于中断变量可能包含'&';?,javascript,regex,web,Javascript,Regex,Web,如何编写JavaScript正则表达式以将URI分隔为查询字符串变量,其中变量本身可能包含“&”字符 我目前正在使用以下代码-但是如果任何变量包含一个&embedded,它将不会捕获该变量的其余部分。如何减轻这种情况 function uriParameters() { var vars = {}; var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,

如何编写JavaScript正则表达式以将URI分隔为查询字符串变量,其中变量本身可能包含“&”字符

我目前正在使用以下代码-但是如果任何变量包含一个&embedded,它将不会捕获该变量的其余部分。如何减轻这种情况

function uriParameters() {
  var vars = {};
  var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
    vars[key] = value;
  });
  return vars;
}

简单问题:你期望从中得到什么变量

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"}

&
是一个特殊字符,用于将url分解为多个变量。如果是值,则对其进行编码


此外,我还想看看这个答案,看看是否有一个完整的函数来处理参数:

为了避免所有的麻烦,在发送参数之前先对参数进行编码。我无法控制URI中传递的内容。我只是把它拆开,在JS中阅读。
&
可以同时出现在名称和值中吗?我认为如果
&
只能出现在值中,那么歧义可以解决。当然,三种不同的形式至少需要两种断言:)所需的结果是a=b&c,d=e。