示例第一,问题第二......
'?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/);
// ['sort=alpha', 'sort', '=alpha', 'alpha']
'?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/g);
// ['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"]
总之,示例3)仍然是正确的,但请转到this answer以获得更合格的回复。
结束更新
引用并感谢Steven Benner:
答案 0 :(得分:3)
首先回答问题:
["sort=alpha", "direction=asc"]
版本都会获得g
- 因此它们根本不相同。match
的第一个返回值是整个匹配的字符串(在这种情况下,一个或多个字符不是&符号,问号或等号后面可选地后面跟一个等号和零个或多个字符是不是&符号。replace
正在迭代它在字符串中找到的每个匹配项。使用多次调用exec
或使用您拥有的现有正则表达式:
> '?sort=alpha&direction=asc&another=value'.match(/([^?&=]+)(=([^&]*))?/g);
["sort=alpha", "direction=asc", "another=value"]
您使用哪种浏览器为您提供了第一个问题的结果?