【问题标题】:Regex to match comma separated numbers or stop (Full match only) [duplicate]正则表达式匹配逗号分隔的数字或停止(仅完全匹配)[重复]
【发布时间】:2023-03-03 09:50:01
【问题描述】:

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

这是一个应该匹配的例子

3123123213212,3123123263212,3173123213212

这个字符串不应该匹配

3123123213212,3123123263212dad,3173123213212

所以至少有一个无效数字会导致不匹配的正则表达式。

我试过的是下面的表达式

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

这里是 Regex101 链接

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

即使某些数字无效,它也匹配其他数字,但这是不可接受的问题。

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

谢谢。

更新

对不起,我没有提到,我需要对每个数字进行分组。

【问题讨论】:

  • 为什么不使用一个好的 Tim 的正则表达式,然后 - 如果测试返回 true - 与 , 拆分?您不能只使用模式中的一个捕获组来获得任意数量的组。
  • 你的意思是你需要对每一个数字进行分组?您期望的输出结果是什么?

标签: javascript regex regex-lookarounds


【解决方案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

【讨论】:

  • 对不起,我忘了说,我需要对每个数字进行分组。
  • 你不能在单个正则表达式中做到这一点,至少在 JavaScript 中是这样。您需要分两步进行 - 首先,使用上述正则表达式确保整个字符串有效,然后使用 /\d+/g 提取所有数字。
【解决方案2】:

你可以寻找开始和结束之间的部分。

var regex = /^(\d+,)*\d+$/;

console.log('3123123213212,3123123263212,3173123213212'.match(regex));
console.log('3123123213212,3123123263212abc,3173123213212'.match(regex));

【讨论】:

  • 对不起,我忘了说,我需要对每个数字进行分组。
【解决方案3】:

在这种情况下,我不确定是否可以匹配和捕获您想要的内容而不包括其他一些(不受欢迎的)捕获,即包含逗号的捕获。

相反,您可以测试字符串,如果匹配,则使用逗号作为分隔符将字符串拆分为数组。如果字符串不匹配,则返回一个空数组或您想表示“不匹配”的其他值。

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

【讨论】:

  • 只匹配两个数字
  • @bxfvgekd 更新了我的答案。
猜你喜欢
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 2014-02-25
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多