我有以下正则表达式:
(\d{5}[,])
这符合以下条件:
12005,11111,11111,
但是如何使尾随逗号可选?
编辑:
可接受的结果是:
12005,
11111,11111,
12005
11111,11111
不可接受:
123456
123456,
12345,123456
123456,123456
我有以下正则表达式:
(\d{5}[,])
这符合以下条件:
12005,11111,11111,
但是如何使尾随逗号可选?
编辑:
可接受的结果是:
12005,
11111,11111,
12005
11111,11111
不可接受:
123456
123456,
12345,123456
123456,123456
(\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"]
(\d{5}[,]?)
将匹配
12005,11111,11111,
或者
12005,11111,11111
为确保不匹配 6 位或更多位数字中的 5 位数字,请使用字边界断言 ( \b
) 和行首断言 ( ^
),如下所示:
(?:\b|^)(\d{5})(?:,|$)
也许是这样:
((?:\d{5},)*\d{5})
如果一组 5 个数字或多个以逗号分隔的数字将起作用。或者您可以完全明确并在其上打出开头和结尾:
^((?:\d{5},)*\d{5})$
\d{5}[,]*
- 0 或更多或\d{5}[,]?
- 0 或 1。