A fully tested regex that extracts and validates date parts using named capturing groups.
\
Validations:
Year must be preceded by nothing or a non-digit character
Year must have 4 digits
Month must be between 01 and 12
Month must have 2 digits
Day must be between 01 and the maximum number of days for the month (e.g. february can't have more than 29 days)
Day must have 2 digits
Day must be followed by nothing or a non-digit character
Separator must be any single character that is not a space or an alphanumeric character
Separator must be the same between each date part
\
Capturing groups:
| # | Name | Description |
|:-:|:-------:|-------------------------------------|
| 1 | year | 4 digits of the year |
| 2 | sep | Date parts separator |
| 3 | month | 2 digits of the month |
| 4 | day | 2 digits of the date (day of month) |
\
Example usage:
let match = regex.exec('2020-11-22')
console.log('year: %s, month: %s, day: %s',
match.groups.year,
match.groups.month,
match.groups.day)
// year: 2020, month: 11, day: 22
\
Compatibility: (updated 2020-11-20)
Chrome >= 64
Edge >= 79
Firefox >= 78
IE incompatible (lookbehind assertions & named capture groups not supported)
Opera >= 51
Safari incompatible (lookbehind assertions not supported)
NodeJS >= 10.0.0
See regex compatibility table.
\
Note: does not validate leap years (not really possible in regex)