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

标签 javascript regex

使用 JavaScript 中的 navigator.userAgent 从 HTTP User-Agent header 获取信息,我们得到如下内容(使用不同的操作系统和浏览器):

"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"

如您所见,操作系统版本是第三个分号之前的一组数字;

我需要一个 JavaScript 正则表达式来获取他的号码。

非常感谢。

最佳答案

正则表达式匹配方法在这里会很尴尬。正如您从自己的示例中看到的那样,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"]

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

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 Version/10.63

还请记住,USER AGENT 字符串可能会被欺骗,使其看起来完全不同或包含不同的信息。

关于javascript - RegEx 用于检测 JavaScript 中的操作系统版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4246394/

相关文章:

javascript - 绘制后单击按钮删除多边形

javascript - 如何使用 javascript 将内容设置为 radeditor

sql - 如何使用 sql 更新正则表达式

java - 为什么这个模式在java中需要很长时间才能匹配?

javascript - Highcharts 根据类别值更改栏背景颜色

javascript - 使用新值更新时出现数组问题

javascript - 使用 Javascript/C 发送/接收换行符

python - 使用正则表达式抓取特定单词

python - 压缩字符串中的空格

python - 如何从正则表达式类中获取可匹配字符列表