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個長度的數組
        //其中在([(^)(&)(?)])中屢次用了(),可是由於在[]中,就不須要遵循以上規則了
相關文章
相關標籤/搜索