Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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正则表达式请求参数解析吗_Javascript_Regex_Http Request Parameters - Fatal编程技术网

需要解释Javascript正则表达式请求参数解析吗

需要解释Javascript正则表达式请求参数解析吗,javascript,regex,http-request-parameters,Javascript,Regex,Http Request Parameters,第一个例子,第二个问题 示例1)“?排序=α&方向=asc”的非全局匹配 输出: 示例2)“?排序=α&方向=asc”的全局匹配 输出: 示例3)全局匹配替换“?排序=α&方向=asc” 输出: 我的问题 我不确定我是否能自己解决这个问题,但我从来没有“活”过一个解决方案,我必须找出原因背后的押韵。我认为具体的比赛“足够充分”。我相信我知道下面的一些答案,但我宁愿不做假设,也不向更聪明的人学习 为什么1)和2)是一样的?(或者是吗? 1)和2)中的“sort=alpha”是什么意思? 为什么2

第一个例子,第二个问题

示例1)“?排序=α&方向=asc”的非全局匹配 输出: 示例2)“?排序=α&方向=asc”的全局匹配 输出: 示例3)全局匹配替换“?排序=α&方向=asc” 输出:

我的问题 我不确定我是否能自己解决这个问题,但我从来没有“活”过一个解决方案,我必须找出原因背后的押韵。我认为具体的比赛“足够充分”。我相信我知道下面的一些答案,但我宁愿不做假设,也不向更聪明的人学习

  • 为什么1)和2)是一样的?(或者是吗?
  • 1)和2)中的“sort=alpha”是什么意思?
  • 为什么2)不同时返回排序和方向参数?
  • 用.replace()迭代什么?
  • 是否有一种不使用.replace()捕获N个参数的方法?
  • 谢谢

    更新

    var regex = new RegExp('([^?&=]+)(=([^&]*))?');
    regex.exec('?sort=alpha&direction=asc');
    // Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
    
    var regex = new RegExp('([^?&=]+)(=([^&]*))?', 'g');
    regex.exec('?sort=alpha&direction=asc');
    // Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
    
    '?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/);
    // Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
    
    '?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/g);
    // Chrome 21 - ["sort=alpha", "direction=asc"]
    
    var regex = new RegExp('([^?&=]+)(=([^&]*))?', 'g');
    regex.lastIndex = 11;
    regex.exec('?sort=alpha&direction=asc');
    // Chrome 21 - ["direction=asc", "direction", "=asc", "asc"]
    
    总之,示例3)仍然正确,但请转到以获得更符合条件的响应

    结束更新

    var regex = new RegExp('([^?&=]+)(=([^&]*))?');
    regex.exec('?sort=alpha&direction=asc');
    // Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
    
    var regex = new RegExp('([^?&=]+)(=([^&]*))?', 'g');
    regex.exec('?sort=alpha&direction=asc');
    // Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
    
    '?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/);
    // Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
    
    '?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/g);
    // Chrome 21 - ["sort=alpha", "direction=asc"]
    
    var regex = new RegExp('([^?&=]+)(=([^&]*))?', 'g');
    regex.lastIndex = 11;
    regex.exec('?sort=alpha&direction=asc');
    // Chrome 21 - ["direction=asc", "direction", "=asc", "asc"]
    
    参考资料和感谢Steven Benner:

    • (类似的话题,所以我加入了)

    先回答,然后提问:

  • 在Chrome 21和Firefox 14中,对于
    g
    版本,我得到了
    [“sort=alpha”,“direction=asc”]
    ,因此它们根本不一样
  • match
    返回的第一个值是整个匹配的字符串(在本例中,一个或多个字符不是与符号、问号或等号,可选后跟等号,零个或多个字符不是与符号)
  • 确实如此(请参见第1题的答案)-您在哪个浏览器中运行这些测试
  • replace
    正在迭代它在字符串中找到的每个匹配项
  • 使用多个调用
    exec
    或使用现有的正则表达式:

    > '?sort=alpha&direction=asc&another=value'.match(/([^?&=]+)(=([^&]*))?/g);
    ["sort=alpha", "direction=asc", "another=value"]
    

  • 您使用的浏览器为您提供了第一个问题的结果?

    将regex文本存储在var中,然后您可以调用
    ,而(reg.exec(str))
    进行迭代。您所呈现的行为与OP中所描述的行为完全相同。@SeanVieira 1)我在Chrome 21和Firefox 12中得到了您的结果。2) 我想确定一下。3) 我会在上班时找到浏览器版本(最初发布在谷歌Chrome上)。4) 在['sort=alpha','direction=asc']//完整结果集的摘要(仍然有点混乱,宁愿完全捕获结果)的上下文中更有意义(我不认为我会问这个问题)5)参见第4条。@Fabricio Matté没有遵循while语句,也没有参考OP的文档。你的意思是它将在一个循环中迭代两次吗?@SeanVieira可能是一个浏览器regex-quick-要么显示结果摘要,要么只显示第一个匹配的完整匹配。。。我们必须做更多的研究@chemoish我的评论是基于您的第5个问题(替换选项)。查看更多详细信息。
    // ['sort=alpha', 'sort', '=alpha', 'alpha']
    
    getRequestParameters: function () {
        var query_string = {},
            regex = new RegExp('([^?=&]+)(=([^&]*))?', 'g');
    
        '?sort=alpha&direction=asc'.replace(regex, function(match, p1, p2, p3, offset, string) {
            console.log(match, p1, p2, p3, offset, string);
    
            query_string[p1] = p3;
        });
    }
    
    // sort=alpha sort =alpha alpha 1 ?sort=alpha&direction=asc
    // direction=asc direction =asc asc 12 ?sort=alpha&direction=asc 
    
    var regex = new RegExp('([^?&=]+)(=([^&]*))?');
    regex.exec('?sort=alpha&direction=asc');
    // Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
    
    var regex = new RegExp('([^?&=]+)(=([^&]*))?', 'g');
    regex.exec('?sort=alpha&direction=asc');
    // Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
    
    '?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/);
    // Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
    
    '?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/g);
    // Chrome 21 - ["sort=alpha", "direction=asc"]
    
    var regex = new RegExp('([^?&=]+)(=([^&]*))?', 'g');
    regex.lastIndex = 11;
    regex.exec('?sort=alpha&direction=asc');
    // Chrome 21 - ["direction=asc", "direction", "=asc", "asc"]
    
    > '?sort=alpha&direction=asc&another=value'.match(/([^?&=]+)(=([^&]*))?/g);
    ["sort=alpha", "direction=asc", "another=value"]