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个长度的数组
            //其中在([(^)(&)(?)])中多次用了(),但是因为在[]中,就不需要遵循以上规则了
  • 相关阅读:
    [Go] 实现websocket服务端
    [PHP] php使用event扩展的io复用测试
    [MySQL] 使用force index强制使用索引
    [Go] 使用net包作为tcp客户端读取http
    [Go] golang中的包管理
    [Go] 解决golang.org模块无法下载的问题
    [日常] linux设置环境变量
    [Go] golang定时器与redis结合
    [Go] golang定时器的使用
    [Linux] linux路由表
  • 原文地址:https://www.cnblogs.com/malianyong/p/3953758.html
Copyright © 2011-2022 走看看