帮助正则表达式匹配这个数字模式..我只需要接受以下格式的输入。为了实现这个验证逻辑,我需要正则表达式。 我尝试使用以下
/(^(([0-9]{5,6}[,])+[0-9]{5,6})$)|(^(([0-9]{1,5}\*[,])+[0-9]{1,5}\*)$)|(^(([0-9]{5,6}[,])+[0-9]{1,5}\*)$)|(^(([0-9]{1,5}\*[,])+[0-9]{1,5})$)/
但它并不匹配所有场景。
以下是可能的输入
条件 - 数字的长度为5或6.输入必须用逗号分隔。如果输入有 *(通配符搜索),则最大长度不能大于5. ex 123123 (不允许)*
答案 0 :(得分:1)
如果我理解这个问题,这似乎并不复杂。
var x = ['1123*,2133*,123*,1*', '213433,123453,123*', '123333,123623,678123,12323', '1123*,123445,166788,123333'];
var re = /\d{5,6}|\d{1,5}\*/g;
console.log(x.map(s => s.match(re)));
答案 1 :(得分:1)
我不确定我是否完全理解RegExp匹配模式的要求,但这是一个初步的方法。
假设我们有一个变量input
,它被赋值为字符串213433,123453,123*
。然后...
input.match(/\d{5,6}(?!\*)/g);
应该如上所述捕获input
变量的部分内容。我注意到你在尝试使用字符集(即。,[0-9]
部分); \d
术语完成相同的操作。(?!\*)
部分用于检查5位或6位序列后面是否带有星号字符。注意:您必须转义星号。
我们可以假设此处的input
变量已分配给字符串1123*,2133*,123*,1*
,以便测试下一个RegExp匹配模式。
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"]