正则表达式:将Android设备名称与JavaScript匹配
我想将Android设备的名称(例如“Galaxy Nexus”)与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/”之间的所有内容都取下来,那么我就得到了设备
"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类中,不需要编写文本代码>之前 它必须只与正则表达式匹配吗?您可以拆分(“;”)
结果,最后一个结果将是您想要的结果