1

我有以下正则表达式:

(\d{5}[,])

这符合以下条件:

12005,11111,11111,

但是如何使尾随逗号可选?

编辑:

可接受的结果是:

12005,

11111,11111,

12005

11111,11111

不可接受:

123456

123456,

12345,123456

123456,123456
4

5 回答 5

5
(\d{5})(?:,|$)

应该做的伎俩。

为了打破这一点,

  • \d{5}- 5 位数
  • (?:...)- 只用括号括起来|
  • ,- 文字逗号
  • $- 输入结束
  • ,|$- 逗号或输入结束。

需要该|$部分来避免虚假匹配未用逗号分隔的数字组,例如"01234567889".


要查看它的实际效果,请尝试

 JSON.stringify(
     ["01234", "01234,", "01234,56789", "01234,56789", "", "0123456789"]
     .filter(
         function (s) {
             return /^(?:(\d{5})(?:,|$))+$/.test(s);
         }))

它使用更大的 RegExp 来匹配这些组中的一个或多个,因此发出

["01234","01234,","01234,56789","01234,56789"]
于 2012-08-24T17:22:49.870 回答
2
(\d{5}[,]?)

将匹配

12005,11111,11111,

或者

12005,11111,11111
于 2012-08-24T17:23:00.137 回答
1

为确保不匹配 6 位或更多位数字中的 5 位数字,请使用字边界断言 ( \b) 和行首断言 ( ^),如下所示:

(?:\b|^)(\d{5})(?:,|$)
于 2012-08-24T17:33:02.383 回答
0

也许是这样:

((?:\d{5},)*\d{5})

如果一组 5 个数字或多个以逗号分隔的数字将起作用。或者您可以完全明确并在其上打出开头和结尾:

^((?:\d{5},)*\d{5})$
于 2012-08-24T17:22:45.363 回答
0

\d{5}[,]*- 0 或更多或\d{5}[,]?- 0 或 1。

于 2012-08-24T17:24:45.817 回答