Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1
  Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3
  Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12  其中,版本号是Firefox之后的数字。 b.version = vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0"; 
实例化=>
"Firefox"&&RegExp("(?:firefox)[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0";//不懂 

解决方案 »

  1.   

    通过正则表达式的匹配,来取版本号。RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)")正则表达式RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua)//测试ua是否符合正则,如果符合则为ture,否则为falsevMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0"; // ?: 条件表达式
    vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) 如果为true,则取第1个匹配,否则返回0
      

  2.   


    \d表示数字 
    而net中\是一个特殊字符,所以表示\d是\\d. 跟路径是一样的吧。
      

  3.   

    这个正则应该不是楼主写的吧,写的很有问题,尤其是下面红色部分,简直不可理喻
    b.version = vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0"; 拆开来写吧
    <script type="text/javascript">
        var data = ["Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1", "Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3", "Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12" ];
        var vMark = "firefox";
        var reg = RegExp(escape(vMark) + "\\/((?:\\d\.)*\\d)", "i"); 
        for(var i=0;i<data.length;i++)
        {
            if(reg.test(data[i]))
            {
                document.write("源字符串:" + data[i]  + "     匹配结果:" + RegExp.$1 + "<br />");
            }
            else
            {
                document.write("源字符串:" + data[i]  + "     匹配结果:" + RegExp.$1 + "<br />");
            }
        }
    </script> 说下你哪里不懂
      

  4.   


    这就是姐妹军团javascriptlover系列
      

  5.   


    关于这个转义的博客我已经写好了,不过还需要补充些内容,预计本周内发出吧先简单说一下,这是字符串形式定义正则的特点,\d表示数字,而在字符串中,要用\\来表示\的,所以就会有有两个\
    用另一种方式声明正则,则不用两个\
    var reg = /\d/;
      

  6.   

    javascripter  22:27:39
    [\\/:]匹配 /\:  吧no ne  22:28:40
    [\\/:]
    \\表示 \是为了转义后面/的
    javascripter  22:29:23
    / 需要转义吗?
    no ne  22:29:29

    javascripter  22:29:47
    晕,知道了
      

  7.   

    双线操作,没有代理啊,我最近在研究cloudgamer的库,遇到的问题,no ne =》sohighthesky大师咯
      

  8.   

    楼主怎么还是姐妹军团时的作风啊,这个问题MS还没有讨论完呢这个正则真正的问题不在[\\/:]这里,而是在于以下几点1、以下两种声明方式的区别和应用场景
    var reg = new RegExp("Expression", "img");
    var reg = /Expression/img;2、为什么12楼标红的地方我说不可理喻3、为什么要用escape这些问题搞清楚了,这个问题才算有意义PS:另一帖MS没什么意义,就不参与了4、RegExp.$1指什么,哪里赋的值
      

  9.   

    no ne  可不是lxcnn啊,表误会了
      

  10.   

    B = (function(ua)
      {
          var b =
          {
            msie : / msie / .test(ua) && ! / opera / .test(ua),
            opera : / opera / .test(ua),
            safari : / webkit / .test(ua) && ! / chrome / .test(ua),
            firefox : / firefox / .test(ua),
            chrome : / chrome / .test(ua)
          }
          ;
          var vMark = "";
          for (var i in b)
          {
            if (b[i])
            {
                vMark = "safari" == i ? "version" : i;
                break;        }
          }
          b.version = vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0";      b.ie = b.msie;
          b.ie6 = b.msie && parseInt(b.version) == 6;
          b.ie7 = b.msie && parseInt(b.version) == 7;
          b.ie8 = b.msie && parseInt(b.version) == 8;      return b;
      }
      )(window.navigator.userAgent.toLowerCase()); 
      

  11.   

    var reg = new RegExp("Expression", "img");
    var reg = /Expression/img;   这个我到没有见过,我一般就一个
    var reg = new RegExp("Expression" );
    var reg = /Expression/;   
      

  12.   


    img三种匹配模式而已i 表示忽略大小写
    m 表示多行模式
    g 表示全局模式
      

  13.   

          b.version = vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0";vMark  如果是null  空值的处理方式吧escape   这里不需要把  RegExp.$1  获得值吧
      

  14.   

     msie : / msie / .test(ua) && ! / opera / .test(ua),   后面这个还真是没有必要!IE
      而IE各个版本典型的userAgent如下:
      Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
      Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)
      Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
      Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)
      其中,版本号是MSIE之后的数字。Firefox
      Firefox几个版本的userAgent大致如下:
      Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1
      Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3
      Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12  其中,版本号是Firefox之后的数字。Opera
      Opera典型的userAgent如下:
      Opera/9.27 (Windows NT 5.2; U; zh-cn)
      Opera/8.0 (Macintosh; PPC Mac OS X; U; en)
      Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0 
      其中,版本号是靠近Opera的数字。Safari
      Safari典型的userAgent如下:
      Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
      Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3
      其版本号是Version之后的数字。Chrome
      目前,Chrome的userAgent是:
    Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13 
      其中,版本号在Chrome之后的数字。Navigator
    目前,Navigator的userAgent是:
    Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6
    其中,版本号在Navigator之后的数字。 
      

  15.   


    "Firefox"&&RegExp("(?:Firefox)[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0"; 
    用你给的这个实例化的你也看到了,正则表达式中用到了(?:Firefox),为了不取这个内容,还用了非捕捉组,然后后面又用RegExp.$1来取捕获组1匹配的内容,然后再用"Firefox" && 来拼接字符串,其实完全可以在一个正则中处理的,这样太绕了escape在动态生成正则时使用,因为一时变量中出现了正则中的元字符,比如“abc(def”,就会导致正则编译出错,这个是会报错的,所以要用escape进行转义处理,这是出于对程序健壮性的考虑,非动态生成正则是不涉及到这个问题的
      

  16.   


    当然没必要,前面一个是后面一个的充分条件,前面一个匹配结果为true,后面一个必然为true,就是多余的
      

  17.   

    escape  思考很深入!
    b.version =vMark && RegExp("(?:" +vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0";
    vMark &&   地方处理还是很成功的,据说这个是很好的处理了,来自有啊     先通过判断特有字符来判断浏览器类型:
    var b = {
        msie: /msie/.test(ua) && !/opera/.test(ua),
        opera: /opera/.test(ua),
        safari: /webkit/.test(ua) && !/chrome/.test(ua),
        firefox: /firefox/.test(ua),
        chrome: /chrome/.test(ua)
    };
    获取版本信息就比较麻烦,有啊Browser的方法就比较巧妙(有修改):
    var vMark = "";
    for (var i in b) {
        if (b[i]) { vMark = "safari" == i ? "version" : i; break; }
    }
    b.version = vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 http://www.cnblogs.com/cloudgamer/archive/2009/10/29/Cloudgamer_JavaScript_Library.html