url中查找key、value
getQueryString: function(name) {
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
var r = window.location.search.substr(1).match(reg);
if (r != null) {
return unescape(r[2]);
}
return null;
}
针对match的返回值以前有点不理解,现在探讨一下就熟悉多了
"key1=&key2=value2&key3=abc".match(/(^|&)key2=([^&]*)(&|$)/i)
(4) ["&key2=value2&", "&", "value2", "&", index: 5, input: "key1=&key2=value2&key3=abc", groups: undefined]
0: "&key2=value2&"
1: "&"
2: "value2"
3: "&"
groups: undefined
index: 5
input: "key1=&key2=value2&key3=abc"
length: 4
__proto__: Array(0)
根据上述示例可以看出,正则表达式有三个括号,match返回了一个数组,里面有4个元素。一开始并不理解除了0以外的元素的意义,只知道第0个是匹配整个正则表达式的结果,
后来稍微改一改括号里面的数据
([^&]*)表示除&以外的字符
改成
(\D*)(\d*)表示连续的非数字字符+连续的数字字符
"key1=&key2=value23&key3=abc".match(/(^|&)key1=(\D*)(\d*)(&|$)/i)
(5) ["key1=&", "", "", "", "&", index: 0, input: "key1=&key23=value2&key3=abc", groups: undefined]
"key1=&key2=value23&key3=abc".match(/(^|&)key2=(\D*)(\d*)(&|$)/i)
(5) ["&key2=value23&", "&", "value", "23", "&", index: 5, input: "key1=&key2=value23&key3=abc", groups: undefined]
现在数组变成5个了,并且第二个变成连续的非数字字符,第三个变成连续的数字
这才有点恍然大悟,数组里元素的个数是括号的个数+1
第0个是整个匹配结果,其后依次是每个括号中的匹配结果
所以RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')的第二个括号里面就是
等于号(=)后面的
&或者字符串结束前的
中间所有字符