我想找到所有nexus版本。 7和7 2和10。 我有这段代码:http://jsfiddle.net/8eJQb/
function pr(res) {
document.write('<pre>' + JSON.stringify(res, null, 4) +
'</pre><br>')
}
var test = /((Nexus\s[0-9]))/i
var res = test.exec("Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JSS15Q)");
pr(res);//working
var res = test.exec("Mozilla/5.0 (Linux; Android 4.3; Nexus 7 2 Build/JSS15Q)");
pr(res);//not working
var res = test.exec("Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q)");
pr(res);//not working
如何更改reg exp /((Nexus \ s [0-9]))/ i以便它匹配所有用例?
由于
答案 0 :(得分:1)
如果你需要的只是你提到的那三个版本,你可以使用更具体的正则表达式:
var test = /Nexus\s(?:7(?:\s2)?|10)/i
示例:http://jsfiddle.net/8eJQb/9/
否则,只需添加多个数字,然后是可选的空格组和一个数字:
var test = /Nexus\s[0-9]+(?:\s[0-9])?/i
答案 1 :(得分:1)
以下内容适合您。
var test = /Nexus\s*(?:7(?: 2)?|10)/i
也许在这种情况下,负面前瞻也可能就足够了。
var test = /Nexus\s*(?:(?!Build).)+(?=\s)/i
答案 2 :(得分:0)
不要将模式严格限定为1个空格且恰好为1个数字(数字10将不会被捕获)
使用var test = /Nexus\s+([0-9][0-9\s]*)+/i
代替
请参阅此小提琴,例如:http://jsfiddle.net/8eJQb/6/
说明:
第一个\s+
- 意味着在“Nexus”字之后我们必须至少有一个空格
[0-9][0-9\s]*
表示我们必须在空格后面至少有一位数字 - 然后欢迎任意数量的数字和空格 - 它被()
包裹,以便我们以后可以使用