function getUrlParams(param) {
var reg = new RegExp("(^|&)" + param + "=([^&]*)(&|$)", "i"); //定义正则表达式
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
window.location = "http://www.baidu.com?id=6&name=xiaoha&sex=male";
var name = getUrlParams("id"); //6
var age = getUrlParams("name"); //xiaoha
var sex = getUrlParams("sex"); //male
正则部分:
1、"(^|&)" :从头开始匹配‘&’
2、"=([^&]*)(&|$)":=([^&]*)就是匹配=后面零个或多个不是&的字符,直至碰到第一个&为止,(&|$)意思就是匹配最后一个&,在正则表达式中,增加一个()代表着匹配数组中增加一个值
3、"i":即ignore,忽略大小写
其余部分:
1、window.location.search:取url中“?”后面的值,包括"?",取到的值为:?id=6&name=xiaoha&sex=male
2、window.location.search.substr(1):截取第一个字符后面的字符串,即去掉"?",取到的值为:id=6&name=xiaoha&sex=male
PS:substr()函数的使用:stringObject.substr(start,length):start必需,表开始截取的位置;length可选,表截取长度
3、match(reg):匹配正则,匹配后数组中应包含4个值. 在getUrlParams("id")函数中,此时 r 获取到的数组应该是 ["id=6&", "", "id", "&"] ;在getUrlParams("name")函数中,此时 r 获取到的数组应该是 ["&name=xiaoha&", "&", "name", "&"]
PS:match的使用:stringObject.match(regexp),如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。上面例子中正则表达式的子表达式为:(^|&)、([^&]*)、(&|$),所以匹配结果是含有四个元素的数组。