RegEx用于检测JavaScript中的操作系统版本

时间:2010-11-22 14:26:27

标签: javascript regex

使用JavaScript中的navigator.userAgent从HTTP User-Agent标头获取信息,我们得到这样的信息(使用不同的操作系统和浏览器):

"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12"

"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7"

"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009030423 Ubuntu/8.10 (intrepid) Firefox/3.0.7"

"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7"

"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16"

正如您所看到的,OS版本是第三个分号之前的数字组;

我需要一个javascript正则表达式来获取他的数字。

非常感谢。

4 个答案:

答案 0 :(得分:4)

正则表达式匹配方法在这里会很尴尬。从您自己的示例中可以看出,Ubuntu上Firefox的版本细节完全不同。您可以使用简单的拆分正则表达式将字符串分成不同的部分:

// Split on ;, ( or ), removing the white-space at either side 
var parts = navigator.userAgent.split(/\s*[;)(]\s*/);

结果:

["Mozilla/5.0", "Windows", "U", "Windows NT 6.1", "en-US", "AppleWebKit/534.7", "KHTML, like Gecko", "Chrome/7.0.517.44 Safari/534.7"]

这里的额外好处是,您可以提取所需的信息,而无需过于复杂的正则表达式。这里的简单条件可以告诉您OS /版本数据的存储位置,然后进一步处理以仅提取版本号。例如:

var result;
if (/^Linux/.test(parts[3]))
    result = parts[6].split("/").pop(); // "8.10" (Ubuntu)
else
    result = parts[3].split(" ").pop(); // "6.1" (Win 7)

工作演示:http://jsfiddle.net/AndyE/p6Uzc/

其他浏览器/系统(如移动电话上的浏览器)将需要进一步的条件。例如,Windows 7上的Opera 10具有包含以下内容的用户代理字符串

  

Opera / 9.80(Windows NT 6.1; U; en)Presto / 2.6.30版本/ 10.63

还要记住,USER AGENT字符串可以被欺骗,看起来完全不同或包含不同的信息。

答案 1 :(得分:0)

试试这个:

/(?:[^;]+;){2}.*?([\w\.]+);/g

在第一场比赛中,您将找到操作系统版本

答案 2 :(得分:0)

以下内容将抓住第三个分号前面的所有非空格字符并将其放在第一个分组中:

.*?;.*?;.*?(\S+);

根据您要包含的内容,您可以更改\ S以仅包含您感兴趣的字符。

答案 3 :(得分:0)

对我有用的解决方案:

// finding OS
function findOS(){

    var OS_Name = navigator.appVersion;
    if (OS_Name.indexOf("Win") != -1) {
        // 64bit or 32bit version
        if (test(/\sx64|\sx86|\swin64|\swow64|\samd64/i)) {
            // if 64 bit Windows
        } else {
            // if 32 bit Windows
        }
    } else if (OS_Name.indexOf("Mac") != -1
        || OS_Name.indexOf("X11") != -1
        || OS_Name.indexOf("Linux") != -1
        || OS_Name.indexOf("SunOS") != -1   ) {
        //if it's OS that is not Windows
    }
}

function test(regex) {
    return regex.test(navigator.userAgent);
}

非常优雅的方法来检测正在使用哪个OS客户端 64或32位