javascript正则表达式 - 查找数字和空格

时间:2014-04-20 20:17:05

标签: javascript regex

我想找到所有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以便它匹配所有用例?

由于

3 个答案:

答案 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

示例:http://jsfiddle.net/8eJQb/7/

答案 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]*表示我们必须在空格后面至少有一位数字 - 然后欢迎任意数量的数字和空格 - 它被()包裹,以便我们以后可以使用