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";//不懂
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";//不懂
vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) 如果为true,则取第1个匹配,否则返回0
\d表示数字
而net中\是一个特殊字符,所以表示\d是\\d. 跟路径是一样的吧。
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> 说下你哪里不懂
这就是姐妹军团javascriptlover系列
关于这个转义的博客我已经写好了,不过还需要补充些内容,预计本周内发出吧先简单说一下,这是字符串形式定义正则的特点,\d表示数字,而在字符串中,要用\\来表示\的,所以就会有有两个\
用另一种方式声明正则,则不用两个\
var reg = /\d/;
[\\/:]匹配 /\: 吧no ne 22:28:40
[\\/:]
\\表示 \是为了转义后面/的
javascripter 22:29:23
/ 需要转义吗?
no ne 22:29:29
嗯
javascripter 22:29:47
晕,知道了
var reg = new RegExp("Expression", "img");
var reg = /Expression/img;2、为什么12楼标红的地方我说不可理喻3、为什么要用escape这些问题搞清楚了,这个问题才算有意义PS:另一帖MS没什么意义,就不参与了4、RegExp.$1指什么,哪里赋的值
{
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());
var reg = /Expression/img; 这个我到没有见过,我一般就一个
var reg = new RegExp("Expression" );
var reg = /Expression/;
img三种匹配模式而已i 表示忽略大小写
m 表示多行模式
g 表示全局模式
而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之后的数字。
"Firefox"&&RegExp("(?:Firefox)[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0";
用你给的这个实例化的你也看到了,正则表达式中用到了(?:Firefox),为了不取这个内容,还用了非捕捉组,然后后面又用RegExp.$1来取捕获组1匹配的内容,然后再用"Firefox" && 来拼接字符串,其实完全可以在一个正则中处理的,这样太绕了escape在动态生成正则时使用,因为一时变量中出现了正则中的元字符,比如“abc(def”,就会导致正则编译出错,这个是会报错的,所以要用escape进行转义处理,这是出于对程序健壮性的考虑,非动态生成正则是不涉及到这个问题的
当然没必要,前面一个是后面一个的充分条件,前面一个匹配结果为true,后面一个必然为true,就是多余的
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