我正在尝试匹配以逗号分隔的数字,但如果任何数字无效,请停止正则表达式并且根本不匹配。
这是一个应该匹配的例子
3123123213212,3123123263212,3173123213212
此字符串不应匹配
3123123213212,3123123263212dad,3173123213212
因此,至少有一个无效的数字应该会导致无法匹配的正则表达式。
我尝试的是以下表达式
(?:(\d+)(?=\,|\s|$))+
这是Regex101链接
https://regex101.com/r/JpuA5X/1
即使某个数字无效,也会与其他数字匹配,但这是不可接受的。
如何修改我的正则表达式以获得所需的结果?
感谢。
更新
抱歉,我还没有提到,我需要对每个号码进行分组。
答案 0 :(得分:2)
您可以查找开始和结束以及两者之间的部分。
var regex = /^(\d+,)*\d+$/;
console.log('3123123213212,3123123263212,3173123213212'.match(regex));
console.log('3123123213212,3123123263212abc,3173123213212'.match(regex));

答案 1 :(得分:1)
你不需要这样做的外观。锚点就足够了:
/^\d+(?:,\d+)*$/
<强>解释强>
^ # Start of string
\d+ # Match an integer number
(?: # Start of non-capturing group
, # Match a comma
\d+ # Match an integer number
)* # Repeat group any number of times (including 0)
$ # End of string
答案 2 :(得分:0)
在这种情况下,我不确定是否可以匹配并捕获您想要的内容而不包括其他(不合需要的)捕获,其中包括逗号。
相反,您可以测试字符串,如果匹配,则使用逗号作为分隔符将字符串拆分为数组。如果字符串不匹配,则返回一个空数组或其他一些您想要符号化为“不匹配”的值。
var regex = /^\d+(,\d+)*$/;
var valid_string = '3123123213212,3123123263212,3173123213212';
var invalid_string = '3123123213212,3123123263212dad,3173123213212';
console.log(regex.test(valid_string) ? valid_string.split(',') : []);
console.log(regex.test(invalid_string) ? invalid_string.split(',') : []);