我有以下正则表达式:
(\d{5}[,])
符合以下条件:
12005,11111,11111,
但如何使尾随逗号可选?
修改
可接受的结果将是:
12005,
11111,11111,
12005
11111,11111
×:
123456
123456,
12345,123456
123456,123456
答案 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。