正则表达式的5位数后跟一个逗号(尾随逗号可选)

时间:2012-08-24 17:18:57

标签: javascript regex

我有以下正则表达式:

(\d{5}[,])

符合以下条件:

12005,11111,11111,

但如何使尾随逗号可选?

修改

可接受的结果将是:

12005,

11111,11111,

12005

11111,11111

×:

123456

123456,

12345,123456

123456,123456

5 个答案:

答案 0 :(得分:4)

(\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"]

答案 1 :(得分:2)

(\d{5}[,]?)

将匹配

12005,11111,11111,

12005,11111,11111

答案 2 :(得分:1)

要确保不匹配6位或更多位数字的5位数,请使用字边界断言(\b)和行断言开始(^),如下所示:< / p>

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

答案 3 :(得分:0)

也许这就是:

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

如果一组5个数字或多个数字以逗号分隔,则可以正常工作。或者你可以完全明确并拍打开始和结束:

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

答案 4 :(得分:0)

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