2014-12-10 85 views
-1

你好,我想做自動填充匹配這種格式"HH:MM"。 我只想檢查這個正則表達式/^(0[1-9]|1[012]):[0-5][0-9]$/,但不知道如何匹配正則表達式子字符串。我看過維基百科和一些網站,找不到修飾符來檢查'subregex'。這個選項不存在嗎?我終於用下面的代碼解決了這個問題,但是這個數組當然可以以編程方式生成,所以應該已經有我正在尋找的解決方案。或者它不存在,我應該寫它?只匹配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) 
+0

嗨,試試這個鏈接:http://stackoverflow.com/questions/7536755/regular-expression-for-matching-hhmm-time-format – 2014-12-10 21:41:58

+0

@MirekSurma感謝鏈接,但我的正則表達式是有效的。這只是爲自動填充器找到'subregex'。 – Machiaweliczny 2014-12-10 22:01:37

+0

好吧,讓你的字符串匹配這個:(0 [1-9] | 1 [012]):([0-5] [0-9])並獲得第2和第3個結果成員? – 2014-12-10 22:09:40

回答

0

你可能會完成同樣的事情更有效率。
將正則表達式組合爲級聯可選表單,然後使用匹配長度,子串
和模板自動完成時間。

僞代碼(不知道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])? 
       )? 
      )? 
    )? 
) 
$ 
+0

在'input.match(/ /)'中放置正則表達式,雖然我不明白OP想要做什麼。 – nhahtdh 2014-12-11 02:33:21