function getCookie(name){
var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
if (arr = document.cookie.match(reg)){
return (arr[2]);
}else{
return null;
}
}
上述代码是获取指定名称的cookie值:getCookie(name)
该函数返回名称为name的cookie值,如果不存在则返回空
reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");的含义为:
^n 的用法 : 匹配任何开头为n的字符串
"(^|&)"+name 的含义 : 匹配以&name开头 或者 空白name 开头的字符串(其实|前面有空白也就是什么都没有,也就是通配url中第一个参数或第二个参数的情况)
[^abc]的用法 : 匹配除了abc以外的其他字符
[^;]的含义 : 匹配除了 ;以外的任意字符 (也很好理解,因为一旦出现 ;说明是另一个参数了,所以不能匹配了)
[^;]*的含义 : 匹配任意数量的 除了 ;以外的字符 (也就是说name=后面的值一旦有;则就不向后取值了)
n的用法
(;|)的含义 : 匹配; 之外的以任意多个 参数值,一旦遇到 ; 或者 空白 就中止
(遇到 ; 说明到下一个参数了,也就是该参数在中间的情况,遇到 空白 说明没有值了,也就是该参数为最后一个参数
整个“(^|)” + name + "=([^;]*)(;|$)
的含义 :
匹配以 name=开头中间为任意多个除了 ;以外的字符 一旦遇到;或者 空白 就中止取值
注:创建一个RegExp对象: new RegExp(pattern,attributes);
如果使用new关键字 则会创建一个RegExp对象,如果不使用new关键字则不会创建RegExp对象(直接当做一个正则字符串使用)
当前cookie的代码
document.cookie="userId=828";
document.cookie="userName=hulk";
console.log(document.cookie); //userId=828; userName=hulk
两个cookie之间用;隔开后面还有空格,所以用正则匹配获取当前指定的某个cookie名称的值
arr匹配得到的数组结果为:
[" userName=hulk", " ", "hulk", "", index: 11, input: "userId=828; userName=hulk"]
如果全局匹配:
reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)",'g');
那么得到的arr数组为:
[" userName=hulk"]
网友评论