我不知道我完全理解了正则表达式匹配模式的要求,但这里有一个初步探讨。
- 正如我明白你,编号[待匹配]可以具有长度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