仅匹配subregex,正则表达式的一部分

时间:2014-12-10 21:36:40

标签: javascript regex

您好我想自动填充以匹配此格式"HH:MM"。 我想只检查这个正则表达式/^(0[1-9]|1[012]):[0-5][0-9]$/,但不知道如何匹配正则表达式子字符串。我查看了维基百科和一些网站,找不到修改器来检查'subregex'。这个选项不存在吗?我终于用下面的代码解决了这个问题,但是这个数组当然可以通过编程方式生成,所以应该已经有了我正在寻找的解决方案。或者它不存在我应该写它?

patterns = [ /./, /^[0-9]$/, /^(0?[1-9]|1[012])$/, /^(0[1-9]|1[012]):$/, /^(0[1-9]|1[012]):[0-5]$/, /^(0[1-9]|1[012]):[0-5][0-9]$/]
unless patterns[newTime.length].test(newTime)

  newTime = newTime.substring(0, newTime.length - 1)

1 个答案:

答案 0 :(得分:0)

你可能会更有效地完成同样的事情 将正则表达式组合成级联可选形式,然后使用匹配长度substring
和一个自动完成时间的模板。

伪代码(不太了解JS)和真正的正则表达式。

 # pseudo-code:
 # -------------------------
 # input = ....;
 # template = '00:00';
 # rx = ^(?:0(?:[0-9](?::(?:[0-5](?:[0-9])?)?)?)?|1(?:[0-2](?::(?:[0-5](?:[0-9])?)?)?)?)$     
 # match = regex( input, rx ); 
 # input = input + substr( template, match.length(), -1 );


 ^    
 (?:
      0 
      (?:
           [0-9] 
           (?:
                : 
                (?:
                     [0-5] 
                     (?: [0-9] )?
                )?
           )?
      )?
   |  
      1 
      (?:
           [0-2] 
           (?:
                : 
                (?:
                     [0-5] 
                     (?: [0-9] )?
                )?
           )?
      )?
 )
 $