方案
我正在尝试从navigator.appVersion
属性获取操作系统详细信息。
所以我尝试了regexp.exec()
方法:
/\(([a-z0-9 \.]+)(?=;).*\)|\(([a-z0-9 \.]+)\)/i.exec(navigator.appVersion);
以下是不同浏览器的结果:
Opera,Safari,Chrome
["(Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)", "Windows NT 6.1", undefined]
IE
"[(Windows NT 6.1; WOW64; Trident/7.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; rv:11.0)"_"Windows NT 6.1",undefined]
火狐
["(Windows)", undefined, "Windows"]
所以我对regexp定义非常满意,匹配组正确获取操作系统详细信息。但...
问题
为什么在输出数组中,匹配组在浏览器中的位置不同?
什么是' undefined'输出数组的元素?
答案 0 :(得分:1)
undefined是不匹配的组。您只有一个交替,每个交替都有一个捕获组。
这是你的正则表达式。
\(
( [a-z0-9 \.]+ ) # (1)
(?= ; )
.*
\)
|
\(
( [a-z0-9 \.]+ ) # (2)
\)
不确定您需要做什么,但您可以使用单个捕获组来处理这两个
# /\(([a-z0-9 .]+)(?:(?=;).*)?\)/i
\(
( [a-z0-9 .]+ ) # (1)
(?:
(?= ; )
.*
)?
\)