const regex = /^( # Match only leap years
\d\d[2468][048] # multiple of four but not 100
|\d\d[13579][26] # ...
|\d\d0[48] # ...
|[02468][048]00 # multiple of four hundred
|[13579][26]00 # ...
)$/gmu;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^( # Match only leap years
\\d\\d[2468][048] # multiple of four but not 100
|\\d\\d[13579][26] # ...
|\\d\\d0[48] # ...
|[02468][048]00 # multiple of four hundred
|[13579][26]00 # ...
)$', 'gmu')
const str = `^(
\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]| # multiple of four but not 100
[02468][048]00 |[13579][26]00 # multiple of four hundred
)
// accept: multiple of four ()
0004
0008
0012
0016
0020
0024
0028
0032
0036
0040
0044
0048
0052
0056
0060
0064
0068
0072
0076
0080
0084
0088
0092
0096
1560
2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
9996
// accept: Multiple of 400
0000
0400
0800
1200
1600
2000
2400
2800
3200
3600
4000
4400
4800
5200
5600
6000
6400
6800
7200
7600
8000
8400
8800
9200
9600
// REJECT: Not a multiple of four
0101
0102
0103
1537
1538
2001
2002
2003
2021
2022
2023
2025
2026
2027
2029
2030
2031
2033
2034
2035
2037
2038
2039
2041
2042
2043
9997
9998
9999
// REJECT: Multiple of 100 but not 400
0100
0200
0300
0500
0600
0700
0900
1000
1100
1500
2100
2200
2300
2500
2600
2700
2900
3000
3100
3300
3400
3500
3700
// REJECT: Negative dates not accepted (malformed)
-2000
-0400
-0100
-0004
// REJECT: Out of range date per RFC 3339
10000
`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
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}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions