const regex = /^(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?))(,(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?)))*\s(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?))(,(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?)))*\s(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?))(,(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?)))*\s(\?|(((\*|(\d\d?L?))(\/\d\d?)?)|(\d\d?L?\-\d\d?L?)|L|(\d\d?W))(,(((\*|(\d\d?L?))(\/\d\d?)?)|(\d\d?L?\-\d\d?L?)|L|(\d\d?W)))*)\s(((\*|(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))(\/\d\d?)?)|((\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\-(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)))(,(((\*|(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))(\/\d\d?)?)|((\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\-(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))))*\s(((\*|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)(\/\d\d?)?)|(([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?\-([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?#([1-5]))(,(((\*|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)(\/\d\d?)?)|(([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?\-([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?#([1-5])))*$/gmi;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^(((\\*|(\\d\\d?))(\\\/\\d\\d?)?)|(\\d\\d?\\-\\d\\d?))(,(((\\*|(\\d\\d?))(\\\/\\d\\d?)?)|(\\d\\d?\\-\\d\\d?)))*\\s(((\\*|(\\d\\d?))(\\\/\\d\\d?)?)|(\\d\\d?\\-\\d\\d?))(,(((\\*|(\\d\\d?))(\\\/\\d\\d?)?)|(\\d\\d?\\-\\d\\d?)))*\\s(((\\*|(\\d\\d?))(\\\/\\d\\d?)?)|(\\d\\d?\\-\\d\\d?))(,(((\\*|(\\d\\d?))(\\\/\\d\\d?)?)|(\\d\\d?\\-\\d\\d?)))*\\s(\\?|(((\\*|(\\d\\d?L?))(\\\/\\d\\d?)?)|(\\d\\d?L?\\-\\d\\d?L?)|L|(\\d\\d?W))(,(((\\*|(\\d\\d?L?))(\\\/\\d\\d?)?)|(\\d\\d?L?\\-\\d\\d?L?)|L|(\\d\\d?W)))*)\\s(((\\*|(\\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))(\\\/\\d\\d?)?)|((\\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\\-(\\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)))(,(((\\*|(\\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))(\\\/\\d\\d?)?)|((\\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\\-(\\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))))*\\s(((\\*|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)(\\\/\\d\\d?)?)|(([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?\\-([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?#([1-5]))(,(((\\*|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)(\\\/\\d\\d?)?)|(([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?\\-([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?#([1-5])))*$', 'gmi')
const str = `* * * * * *
* * * * * *
* * * * * *
3 * * * * *
3 * * * * *
3 * * * * *
3 * * * * *
3 * * * * *
5/15 * * * * *
5/15 * * * * *
5/15 * * * * *
5/15 * * * * *
5/15 * * * * *
7,19 * * * * *
7,19 * * * * *
7,19 * * * * *
2-45 * * * * *
2-4 * * * * *
42-45 * * * * *
42-45 * * * * *
42-45 * * * * *
42-45 * * * * *
42-63 * * * * *
0 3 * * * *
0 3 * * * *
0 0/15 * * * *
0 0/15 * * * *
0 0/15 * * * *
0 0/15 * * * *
0 7,19 * * * *
0 7,19 * * * *
0 * 3 * * *
0 * 3 * * *
0 * 3 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 7,19 * * *
0 * 7,19 * * *
0 * 7,19 * * *
0 1 * * * *
0 0 * * * *
0 * * 3 * *
0 * * 3 * *
0 * * 3 * *
0 * * 3 * *
0 0 0 1/15 * *
0 0 0 1/15 * *
0 0 0 1/15 * *
0 0 0 1/15 * *
0 0 0 7,19 * *
0 0 0 7,19 * *
0 0 0 7,19 * *
0 0 0 7,19 * *
0 0 0 L * *
0 0 0 L * *
0 0 0 3L * *
0 0 0 3L * *
0 0 0 9W * *
0 0 0 9W * *
0 0 0 9W * *
0 0 0 9W * *
0 0 0 9X */2 *
0 0 0 9#2 * *
0 0 0 1 5 *
0 0 0 1 5/2 *
0 0 0 1 5/2 *
0 0 0 1 5/10 *
0 0 0 1 3,7,12 *
0 0 0 1 3,7,12 *
0 0 0 1 3,7,12 *
0 0 0 1 MAR,JUL,DEC *
0 0 0 1 MAR,JUL,DEC *
0 0 0 1 MAR,JUL,DEC *
0 0 0 1 ? *
0 0 0 * * 3
0 0 0 * * 3
0 0 0 * * 3
0 0 0 * * 3
0 0 0 * * 3/2
0 0 0 * * 3/2
0 0 0 * * 3/2
0 0 0 * * 3/2
0 0 0 * * 1,5,7
0 0 0 * * 1,5,7
0 0 0 * * 1,5,7
0 0 0 * * MON,FRI,SUN
0 0 0 * * MON,FRI,SUN
0 0 0 * * MON,FRI,SUN
0 0 0 * * 5L
0 0 0 * * 5L
0 0 0 * * 5L
0 0 0 * * FRIL
0 0 0 * * 5W
0 0 0 * * 5?3
0 0 0 * * 0
0 0 0 * * 0L
0 0 0 * * 0#2
0 0 0 * * 7
0 0 0 * * 7L
0 0 0 * * 7#2
0 0 0 * * 5#3
0 0 0 * * 5#3
0 0 0 * * 7#1
0 0 0 * * 7#1
0 0 0 * * 3#5
0 0 0 * * WED#5
* * 5-1 * * *`;
// 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