Javascript 正则表达式:如何创建单个匹配组
Javascript regexp: how to create a single matching group
场景
我正在尝试从 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]
Firefox
["(Windows)", undefined, "Windows"]
所以我对正则表达式定义非常满意,匹配组正确获取了 OS 详细信息。但是...
问题
为什么在输出数组中匹配的组在不同浏览器中的位置不同?
输出数组的'undefined'元素是什么?
未定义的是不匹配的组。您有一个交替,每个交替都有一个捕获组。
这是您的正则表达式的详细信息。
\(
( [a-z0-9 \.]+ ) # (1)
(?= ; )
.*
\)
|
\(
( [a-z0-9 \.]+ ) # (2)
\)
不确定你需要做什么,但你可以使用一个捕获组来处理这两个问题
# /\(([a-z0-9 .]+)(?:(?=;).*)?\)/i
\(
( [a-z0-9 .]+ ) # (1)
(?:
(?= ; )
.*
)?
\)
场景
我正在尝试从 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]
Firefox
["(Windows)", undefined, "Windows"]
所以我对正则表达式定义非常满意,匹配组正确获取了 OS 详细信息。但是...
问题
为什么在输出数组中匹配的组在不同浏览器中的位置不同?
输出数组的'undefined'元素是什么?
未定义的是不匹配的组。您有一个交替,每个交替都有一个捕获组。
这是您的正则表达式的详细信息。
\(
( [a-z0-9 \.]+ ) # (1)
(?= ; )
.*
\)
|
\(
( [a-z0-9 \.]+ ) # (2)
\)
不确定你需要做什么,但你可以使用一个捕获组来处理这两个问题
# /\(([a-z0-9 .]+)(?:(?=;).*)?\)/i
\(
( [a-z0-9 .]+ ) # (1)
(?:
(?= ; )
.*
)?
\)