const regex = /^(?<year>\d{4})[\-\.\/]?(?<month>0[1-9]|1[02])[\-\.\/]?(?<day>[0-2]\d|3[0-1])[ T]?(?<hour>[0-1]\d|2[0-3])[\:\.]?(?<minute>[0-5]\d)[\:\.]?(?<second>[0-5]\d) ?(?<offset>(?<offset_sign>[\-\+]*)(?<offset_hour>0[0-9]|1[0-2])[\:\.]?(?<offset_minute>[0-5]\d))/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^(?<year>\\d{4})[\\-\\.\\\/]?(?<month>0[1-9]|1[02])[\\-\\.\\\/]?(?<day>[0-2]\\d|3[0-1])[ T]?(?<hour>[0-1]\\d|2[0-3])[\\:\\.]?(?<minute>[0-5]\\d)[\\:\\.]?(?<second>[0-5]\\d) ?(?<offset>(?<offset_sign>[\\-\\+]*)(?<offset_hour>0[0-9]|1[0-2])[\\:\\.]?(?<offset_minute>[0-5]\\d))', 'gm')
const str = `--- SHOULD MATCH ---
20181215144545-06:00
2018-12-15T14:45:45 -06:00
2018-12-15 14:45:45 -06:00
2018.12.15T14.45.45 -06:00
2018.12.15T14.45.45-06.00
2018/12/15T14:45:45-06:00
201812151445450000
103212150000000000
103212151111111111
103212152222221222
--- SHOULD NOT MATCH ---
2018-13-15T14:45:45 -06:00
2018-12-60T14:45:45 -06:00
2018-12-15T24:45:45 -06:00
2018-12-15T14:60:45 -06:00
103212152222222222
103212152222221322`;
// 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