getCookie = function(t) {
     var s = document.cookie.match("(?:^|;)\\s*" + t + "=([^;]*)");
      return (s && s[1]) ? decodeURIComponent(s[1]) : ""
 },
(?:^|;)这句我不明白,是什么意思
还有match参数里的字符串能当正则用?
如果是正则,那么为什么s[1]得到的是([^;]*)里的值,而不是(?:^|;)里的值

解决方案 »

  1.   

    match 的参数就是个正则,如果是字符串的话该正则就是匹配这个字符串的意思s[0]才是得到(?:^|;) ,数组从0开始
      

  2.   


    1.(?:^|;) 在行开头或者是以;开头. ?:非捕获
    2.match里面的字符串本来就应该是正则 不是当正则
    3.不是数组的原因. 因为?:表示非捕获 也就是他修饰的括号里 不进行保存 你可以把?:去掉 就可以看到效果了
      

  3.   


    非捕获是非捕获,但是这里不是这个原因比如var s="#11111111";
                   var rex=/#(?:\d+)/;
                   alert(s.match(rex)[1]);//这里脚标是1就是undefine 0的话就是#11111111
    //可见和非捕获没关,除非他alert(RegExp.$1) 
      

  4.   

    这个你就得去查下API了.. match在没有g表示的情况下.arr[0]是存储着完整的匹配arr[1]~arr[n]分别存储着()1~n个引用...你刚才非捕获了 当然就是undefiend了
      

  5.   


    <script type="text/javascript">
    <!--
    str = "abbb34eftab0modabbbbb6";
    var reg = /a(b)+(\d+)/i;// then test: var reg = /a(b)+(\d+)/ig
    var arr = str.match(reg);
    for(var i = 0; i < arr.length; i++){
        document.write(arr[i] + "---->"); //根据返回结果可知如果有g全局,那么返回所有匹配[abbb34,ab0,abbbbb6]
                                          //如果没有g全局,那么返回数组arr[0]为匹配的完整字串后面是括号里的捕获[abbb34,b,34];
    }
    //-->
    </script>给你个例子
      

  6.   

    嗯,查了下API,确实
     原来一直以来都弄错了,谢谢
      

  7.   


    你随便查个文档就知道了 正则^ 表示行开头 $表示行结尾.
    就像你上面代码 应该传入的参数是cookie的name.而name有可能是两种情况
    1. name=aaa;expires='...'; //这种就是在行开头 所以用^
    2. expires='...';name=aaa; // 这种name在后面的就是以;开头
    鉴于这两种情况所以用选择符(^|;)//这样就肯定能取到name的value