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个长度的数组
        //其中在([(^)(&)(?)])中多次用了(),但是因为在[]中,就不需要遵循以上规则了

 

posted @ 2014-09-03 15:18  小银光  阅读(1543)  评论(0编辑  收藏  举报