需要解释Javascript正则表达式请求参数解析吗
第一个例子,第二个问题 示例1)“?排序=α&方向=asc”的非全局匹配 输出: 示例2)“?排序=α&方向=asc”的全局匹配 输出: 示例3)全局匹配替换“?排序=α&方向=asc” 输出:需要解释Javascript正则表达式请求参数解析吗,javascript,regex,http-request-parameters,Javascript,Regex,Http Request Parameters,第一个例子,第二个问题 示例1)“?排序=α&方向=asc”的非全局匹配 输出: 示例2)“?排序=α&方向=asc”的全局匹配 输出: 示例3)全局匹配替换“?排序=α&方向=asc” 输出: 我的问题 我不确定我是否能自己解决这个问题,但我从来没有“活”过一个解决方案,我必须找出原因背后的押韵。我认为具体的比赛“足够充分”。我相信我知道下面的一些答案,但我宁愿不做假设,也不向更聪明的人学习 为什么1)和2)是一样的?(或者是吗? 1)和2)中的“sort=alpha”是什么意思? 为什么2
我的问题 我不确定我是否能自己解决这个问题,但我从来没有“活”过一个解决方案,我必须找出原因背后的押韵。我认为具体的比赛“足够充分”。我相信我知道下面的一些答案,但我宁愿不做假设,也不向更聪明的人学习
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:
- (类似的话题,所以我加入了)
g
版本,我得到了[“sort=alpha”,“direction=asc”]
,因此它们根本不一样match
返回的第一个值是整个匹配的字符串(在本例中,一个或多个字符不是与符号、问号或等号,可选后跟等号,零个或多个字符不是与符号)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"]