所以我试图匹配像
这样的东西2011,2012,2013
或
2011,
或
2011
但不是:
2011,201
或2011,201,2012
我尝试使用([0-9]{4},?([0-9]{4},?)*)
,但如果第一年匹配,则不考虑其余部分。
答案 0 :(得分:4)
你很亲密。
^[0-9]{4}(?:,[0-9]{4})*,?$
这将匹配由重复的4位数字和逗号序列组成的任何字符串。
^
和$
分别匹配字符串的开头和结尾。因此,只有当字符串仅包含 那些元素时才会匹配。
(?:)
是非捕获组。它允许您创建重复组而不将所有组存储到变量中。
编辑:忘记了最后的可选逗号。添加了,?
来处理它。
编辑2:在FailedDev的建议中,这是我最初的想法。它也有效,但我认为它更难理解。它更聪明,但这并不总是一件好事。
^(:?[0-9]{4}(?:,|$))+$
答案 1 :(得分:1)
这样可以解决问题......
/^[0-9]{4}(,[0-9]{4})*,?$/
即。 4个数字后跟零或更多(逗号后跟4位数),最后可选择最后一个(坏看)逗号。
第一个^
和最后$
个字符确保字符串中不存在任何其他内容。
答案 2 :(得分:1)
if (subject.match(/^\d{4}(?:,?|(?:,\d{4}))+$/)) {
// Successful match
}
这应该有用。
说明:
"^" + // Assert position at the beginning of the string
"\\d" + // Match a single digit 0..9
"{4}" + // Exactly 4 times
"(?:" + // Match the regular expression below
"|" + // Match either the regular expression below (attempting the next alternative only if this one fails)
"," + // Match the character “,” literally
"?" + // Between zero and one times, as many times as possible, giving back as needed (greedy)
"|" + // Or match regular expression number 2 below (the entire group fails if this one fails to match)
"(?:" + // Match the regular expression below
"," + // Match the character “,” literally
"\\d" + // Match a single digit 0..9
"{4}" + // Exactly 4 times
")" +
")+" + // Between one and unlimited times, as many times as possible, giving back as needed (greedy)
"$" // Assert position at the end of the string (or before the line break at the end of the string, if any)
答案 3 :(得分:0)
/^(?:\d{4},?)*$/
检查四个数字,每个数字后面可能跟一个逗号,0到多次