0

我知道 IE11 改变了navigator.userAgent发送方式,我也看到了这个响应。如果我们只需要 IE11 及更高版本,这很有效,但我们需要 IE9 及更高版本。我在某处读到 Trident 代码名称是在 IE9 中引入的,但对 IE8 的快速测试表明那里的用户代理也包含 Trident。

我的正则表达式不是很好;如何拆分这些字符串以确定Trident/和后面的分号之间的内容,以便我可以知道我正在处理哪个版本?(请不要告诉我改用特征检测;这不是这里的选项。)

即 8:

"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BO1IE8_v1;ENUS)"

即 9:

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)" 

我现有的代码(不捕获 IE8)如下所示:

if (navigator.userAgent.match(/Trident/)) {
   // it's supported; do stuff
}

基本上,我试图从 IE9 获取 5.0,从 IE8 获取 4.0。

4

1 回答 1

1

我的正则表达式不是很好;如何拆分这些字符串以确定 Trident/ 和以下分号之间的内容,以便我可以知道我正在处理哪个版本?

您想使用捕获组并获取数组的第二个元素,这将为您提供捕获的部分。

var stringAfterTrident = navigator.userAgent.match(/Trident([^;]+);/)[1];
//should return ["Trident/5.0;", "/5.0"] and you want the second item of the array

/Trident([^;]+);/基本上说以三叉戟开头,捕获一个或多个不是分号的字符,直到有分号。

于 2013-09-25T18:22:58.687 回答