正则表达式:将Android设备名称与JavaScript匹配

正则表达式:将Android设备名称与JavaScript匹配,javascript,android,regex,device-name,Javascript,Android,Regex,Device Name,我想将Android设备的名称(例如“Galaxy Nexus”)与JavaScript正则表达式模式匹配 我的用户代理如下所示: "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/”之间的所有内容都取下来,那么我就得到了设备

我想将Android设备的名称(例如“Galaxy Nexus”)与JavaScript正则表达式模式匹配

我的用户代理如下所示:

"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];
问题是,我的表达式接受第一个分号之间的所有内容,并包含“Build/”。所以我得到:

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

有人知道我如何才能让我的表达更智能,只需获得“Galaxy Nexus Build”

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

/;[^;]*Build/
您可以测试:

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 + "#");

使用以下方法,您可以一次获得准确的结果:

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   

因为我排除了
从character类中,不需要编写文本
之前

它必须只与正则表达式匹配吗?您可以
拆分(“;”)
结果,最后一个结果将是您想要的结果