zoukankan      html  css  js  c++  java
  • 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个长度的数组
            //其中在([(^)(&)(?)])中多次用了(),但是因为在[]中,就不需要遵循以上规则了
  • 相关阅读:
    【leetcode】974. Subarray Sums Divisible by K
    【leetcode】976. Largest Perimeter Triangle
    【leetcode】973. K Closest Points to Origin
    listen 70
    科学60秒 (一) :上
    listen 69
    listen 68 Theoretical Physicist Stephen Hawking Dies at 76
    中译英33
    listen 67
    中译英32
  • 原文地址:https://www.cnblogs.com/malianyong/p/3953758.html
Copyright © 2011-2022 走看看