2015-07-01 34 views
0

方案的Javascript正則表達式:如何創建一個匹配組

我試圖讓從navigator.appVersion財產操作系統的詳細信息。

所以我嘗試了regexp.exec()方法:

/\(([a-z0-9 \.]+)(?=;).*\)|\(([a-z0-9 \.]+)\)/i.exec(navigator.appVersion);

在這裏,在不同的瀏覽器的結果:

  • 歌劇,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"]

所以我對正則表達式定義很高興,匹配組得到正確的操作系統的詳細信息。但是......

問題

  1. 爲什麼輸出數組中的匹配組得到了跨瀏覽器不同的位置?

  2. 什麼是輸出數組中的'undefined'元素?

回答

1

未定義的是不匹配的組。你有一個單獨的替代,每個都有一個捕獲組。

這是你的詳細正則表達式。

\(
    ([a-z0-9 \.]+)    # (1) 
    (?= ;) 
    .* 
    \) 
| 
    \(
    ([a-z0-9 \.]+)    # (2) 
    \) 

不知道你需要做什麼,但你可以使用一個捕獲組同時處理

# /\(([a-z0-9 .]+)(?:(?=;).*)?\)/i 

\(
([a-z0-9 .]+)    # (1) 
(?: 
     (?= ;) 
     .* 
)? 
\) 
+0

感謝。現在我明白爲什麼輸入數組中有三個元素。幹!! –