2013-07-15 48 views
0

我想使用JavaScript RegEx模式匹配Android設備的名稱(例如「Galaxy Nexus」)。正則表達式:使用JavaScript匹配Android設備名稱

我的用戶代理是這樣的:

"Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30" 

如果我把一切之間的 「;」和「Build /」然後我得到設備名稱。但它必須是「;」的最後一次出現在「Build /」之前。

此刻,我有以下表現:

var match = navigator.userAgent.match(/;[\s\S]*Build/)[0]; 

的問題是,我的表達需要第一個分號之間的所有內容,包括「建立/」。所以我得到:

"; U; Android 4.0.2; en-us; Galaxy Nexus Build" 

有沒有人知道如何讓我的表達更聰明,只是得到「Galaxy Nexus Build」?

+0

它必須只與匹配的正則表達式?你可以將結果拆分(「;」),最後一個將是你想要的 – user1651640

回答

1

你可以測試:

var txt = "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"; 
var regex = /;\s*([^;]+)\s+Build\//g; 
var match = regex.exec(txt)[1]; 
alert("#" + match + "#"); 

http://jsfiddle.net/7AMrt/

0

排除分號,而不是使用[\s\S]的可能性:

/;[^;]*Build/ 
1

您可以使用此有一個鏡頭確切的結果:

var regex = /[^;\s][^;]+?(?=\s+build\b)/i; 

,或者如果你想確保沒有生成後一個右括號:

var regex = /[^;\s][^;]+?(?=\s+build\b[^)]*\))/i; 


說明:

[^;\s]  # a character that is not a ; or a space (avoid to trim the result after) 
[^;]+?  # all characters that are not a ; one or more times with a lazy 
      # quantifier (to not capture the leading spaces) 

(?=  # lookahead (this is just a check and is not captured) 
    \s+ # leading spaces 
    build # 
    \b  # word boundary 
)   # close the lookahead 

因爲我從字符類排除;,有沒必要寫前面的文字;