为什么这场比赛失败?

时间:2011-08-13 21:32:45

标签: javascript regex

我有this代码:

var tlTemp=new Array();

tlTemp.push("00 - 01:??:?? - TL 1");
tlTemp.push("00 - 12:??:?? - TL 2");

for(i=0; i<tlTemp.length; i++) {
    var removedTL = tlTemp[i].match(/^(\d\d) - (\?\?|10|0\d):(\?\?|[0-5]\d):(\?\?|[0-5]\d) - (.*)/);

    if(removedTL!=null) {
        alert("ok");
    }
    else
    {
        alert("no");
        return;
    }
}

我不明白为什么第一个字符串打印好,第二个字符串打印(如此相似)没有。为什么呢?

3 个答案:

答案 0 :(得分:2)

定义字符串不同部分的正则表达式的适当部分是:

(\?\?|10|0\d)

匹配:

??
10
0x   where x is a digit

所以12不匹配。

现在,还有TL 2而不是TL 1,但在正则表达式中,这被定义为:

(.*)

匹配所有内容,以免造成问题。

答案 1 :(得分:1)

因为您的正则表达式明确排除了它。

本节:

/^(\d\d) - (\?\?|10|0\d)

将匹配限制为以两位数字开头的字符串,空格,短划线和空格,然后是“??”,“10”或“0”后跟数字。

答案 2 :(得分:1)

正则表达式的这一部分:(\?\?|10|0\d)应更改为(\?\?|10|\d\d)。零变为\ d。在第一个字符串中,字符串的该部分为01,而第二个字符串为12,与正则表达式不匹配。