我不知道我完全理解了正則表達式匹配模式的要求,但這裏有一個初步探討。
- 正如我明白你,編號[待匹配]可以具有長度5或6和匹配圖案應當能夠捕獲符合該描述的數字的任何量。對於這部分,我將假定數字序列中不包含星號字符(*)。
我們假設我們有一個變量input
,它被賦值爲字符串213433,123453,123*
。然後...
input.match(/\d{5,6}(?!\*)/g);
應該捕獲input
變量的部分,如上所述。我注意到你在嘗試使用字符集(,即,[0-9]
部分); \d
期限完成相同的事情。(?!\*)
部分用於檢查5或6位序列後面是否沒有星號字符。注意:您必須轉義星號。
- 如果輸入具有星號字符,則匹配部分不能超過5個字符。 (我希望我正確理解提示)!爲此,下面的RegExp模式適用於我運行的兩個測試(不可否認)。注:該模式保留(,即,匹配/捕獲)星號字符以及數字序列。
爲了測試下一個RegExp匹配模式,我們可以假設這裏的input
變量被分配給字符串1123*,2133*,123*,1*
。
input.match(/(\d+\*){1,5}/g);
如果我沒有記錯的話,這兩個匹配模式可以有條件地使用簡單的OR(|
)運營商合併。
input.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g);
希望這會有所幫助。作爲最終測試,讓我們將input
變量賦值爲字符串1123*,2133*,123*,1*,123333,123623,678123,12323
(我連接了示例輸入1和3,您爲此提供的)。然後,直接運行上面的語句返回數組:
["1123*", "2133*", "123*", "1*", "123333", "123623", "678123", "12323"]
如果你想找回比賽沒有任何通配符(*),你可以簡單地修改表達式如下:
a.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g).map(val => val.replace('*', ''));
得到...
["1123, "2133", "123", "1", "123333", "123623", "678123", "12323"]
你能解釋一下模式嗎? – Barmar
這與您在一小時前問過的問題不同嗎? http://stackoverflow.com/questions/40535382/regex-for-number-series-validation – Barmar
減去要求 - 我加了他們 – mplungjan