使用 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/