我尝试为荷兰牌照(kentekens)写一些正则表达式,the documentation非常清楚,我只想在格式上检查它们,而不是现在可以使用实际的字母字符。
My regex (regex101)如下所示:
(([0-9]{1,2}|[a-z]{1,3})-([0-9]{2,3}|[a-z]{2,3})-([0-9]{1,2}|[a-z]{1,2})){8}/gi
然而,这不会匹配,而
([0-9]{1,2}|[a-z]{1,3})-([0-9]{2,3}|[a-z]{2,3})-([0-9]{1,2}|[a-z]{1,2}/gi
确实
但我做喜欢检查总长度。
JS Demo代码段
const regex = /([0-9]{1,2}|[a-z]{1,3})-([0-9]{2,3}|[a-z]{2,3})-([0-9]{1,2}|[a-z]{1,2})/gi;
const str = `XX-99-99
2 1965 99-99-XX
3 1973 99-XX-99
4 1978 XX-99-XX
5 1991 XX-XX-99
6 1999 99-XX-XX
7 2005 99-XXX-9
8 2009 9-XXX-99
9 2006 XX-999-X
10 2008 X-999-XX
11 2015 XXX-99-X`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
答案 0 :(得分:4)
这是因为最后添加的{8}
量词将作用于前一个表达式,在本例中是整个正则表达式,因为它用括号括起来。 See here匹配此正则表达式。
要测试长度,请使用此正则表达式(?=^.{1,8}$)(([0-9]{1,2}|[a-z]{1,3})-([0-9]{2,3}|[a-z]{2,3})-([0-9]{1,2}|[a-z]{1,2}))
它使用前瞻来确保以下字符与^.{1,8}$
匹配,这意味着整个字符串应包含1到8个字符,您可以调整它符合您的需求。