javascript中match和RegExp组合用法
function getCookie(name)//取cookies函数 { //coook中document.cookie = "age=12; name=1.css"; var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)")); if (arr != null) return unescape(arr[2]); return null; } //getCookie(name); //arr[0]="name=1.css" //arr[1]="" //arr[2]="1.css" //arr[3]="" //为什么arr返回的长度为4的数组? //在博客园和csdn问了好多都没有一个准确的回答,之后在一步一步实验中发现了答案 //第一步:先匹配"(^| )" + name + "=([^;]*)(;|$)" //第二步:在匹配()里面的也就是(^| ),([^;]*),(;|$) //答案就是"(^| )" + name + "=([^;]*)(;|$)",(^| ),([^;]*),(;|$).也就返回了arr长度为4的数组 //注意:一定要第一步能匹配,才会进行第二步匹配.否者直接返回null //由此举一反三,我们在用javascript获取参数时也以用这个 function Request(name) { //url=http://localhost:9120/Cookie.html?mly=1&c=12 var arr = window.location.search.match(new RegExp("([(^)(&)(?)])" + name + "=([^&]*)(&|$)")); if (arr != null) return unescape(arr[2]); return null; } //Request("mly"); //返回1 //注意:在前面我们说过()会多次匹配,在()中继续加()还会继续匹配 //例如:"12".match(new RegExp("((1))2"))会返回长度为3的数组,arr[0]=12,arr[1]=1,arr[2]=1; //例如:"12".match(new RegExp("((1)|(2))2"))会返回长度为4的数组,arr[0]=12,arr[1]=1,arr[2]=1,arr[3]=undefined; //arr[3]=undefined在右边(2)在第一次匹配时没有用到,以后在与(2)匹配时直接返回undefined;这也证明了有多少个()就会返回()+1个长度的数组 //其中在([(^)(&)(?)])中多次用了(),但是因为在[]中,就不需要遵循以上规则了