正则表达式匹配逗号分隔数字或停止(仅限完全匹配)

时间:2017-06-05 17:08:28

标签: javascript regex regex-lookarounds

我正在尝试匹配以逗号分隔的数字,但如果任何数字无效,请停止正则表达式并且根本不匹配。

这是一个应该匹配的例子

3123123213212,3123123263212,3173123213212

此字符串不应匹配

3123123213212,3123123263212dad,3173123213212

因此,至少有一个无效的数字应该会导致无法匹配的正则表达式。

我尝试的是以下表达式

(?:(\d+)(?=\,|\s|$))+

这是Regex101链接

https://regex101.com/r/JpuA5X/1

即使某个数字无效,也会与其他数字匹配,但这是不可接受的。

如何修改我的正则表达式以获得所需的结果?

感谢。

更新

抱歉,我还没有提到,我需要对每个号码进行分组。

3 个答案:

答案 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(',') : []);