正则表达式无法正确识别IE版本

时间:2013-10-28 20:02:29

标签: javascript regex internet-explorer

我有一个试用浏览器是IE 9或更高版本的正则表达式。我有一个正则表达式,如果它是IE 9而不是IE 10将会识别。

努力识别IE 9:MSIE ([0-9]{1,}[\.0-9]{0,})

部分IE 10用户代理文本:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)

Regex目前尚未识别IE 9或10:MSIE ^(?:0|[1-9][0-9]?)$

这是在javascript中完成的,所以这是代码:

function IsIE9() {
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var ua = navigator.userAgent;
        //var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        var re = new RegExp("MSIE ^(?:0|[1-9][0-9]?)$");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.$1);
    }
    return parseInt(rv) >= 9;
}

有人可以帮我识别一个能识别IE版本并返回数值的正则表达式(我不想在那里硬编码IE值,所以不必为每个新的IE版本更新它。

----更新----

这两个答案似乎都有效。我使用这个来获取我的正则表达式来获取版本号:MSIE ((?:0|[1-9][0-9]?))它返回整数值。

2 个答案:

答案 0 :(得分:2)

为什么不使用单个正则表达式提取版本号。我看了here,看来所有IE用户代理字符串的格式都是“MSIE v.n;”。

var re = /MSIE ([^;]*)/; // stop at the following semi-colon
var agentString = "agent string here";
var version = re.exec(agentString)[1]; // [1] is the capture from ()

var majorVersion = version.split('.')[0]; // "9" or "10"

但是,根据您的操作,您可能需要考虑功能检测而不是浏览器嗅探。

答案 1 :(得分:0)

删除^$,这些是表示行的开头和结尾