const regex = /^(=?202\d)(\d{0,3}[A-Z]{1,4}|[A-Z]{1,4}\d{1,3})([\dA-Z]{0,4})A/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^(=?202\\d)(\\d{0,3}[A-Z]{1,4}|[A-Z]{1,4}\\d{1,3})([\\dA-Z]{0,4})A', 'gm')
const str = `Matches R1 R2 R3 R4 R5 R6
2022A144A OK OK OK OK \\D\\d\\d\\d
20228BC3A OK OK OK OK \\d\\D\\D\\d
20228Z1DA OK OK OK OK \\d\\D\\d\\D
2022K2 A
20229999A NOK \\d\\d\\d\\d
2022B123A OK OK OK OK \\D\\d\\d\\d
20221B23A OK OK OK OK \\d\\D\\d\\d
202212B3A NOK NOK NOK OK OK \\d\\d\\D\\d
2022123BA NOK OK \\d\\d\\d\\D
2022ABCDA
2022K2 A
Matches 100% as desired
R 12 2022(\\d\\D\\w\\w|\\D\\d\\w\\w|\\d\\d\\D\\w|\\d\\d\\w\\D|\\D\\D\\D\\D)A
R 13 ^(=?202\\d)(\\d{0,3}[A-Z]{1,4}|[A-Z]{1,4}\\d{1,3})([\\dA-Z]{0,4})A
Should match
R1: 2022\\d\\D\\w\\wA
R2: 2022\\D\\d\\w\\wA
R3: 2022(\\d\\D\\w\\w|\\D\\d\\w\\w)A
R4: 2022(\\d\\D\\w\\w|\\D\\d\\w\\w|\\d\\d\\D\\w)A
R5: 2022(\\d\\D\\w\\w|\\D\\d\\w\\w|\\d\\d\\D\\w|\\d\\d\\w\\D)A
R 10 ^(=?202\\d)(\\d*[A-Z]|[A-Z]*)([\\dA-Z]{1,3})A
R 11 ^(=?202\\d)(\\d{1,3}[A-Z]*)([\\dA-Z]{1,3})A
R 12 ^(=?202\\d)(\\d{1,3}[A-Z]{1,3}|[A-Z]{1,3}\\d{1,3})([\\dA-Z]{0,3})A
^ Start of string
(?=[a-z\\d]{8,}\$) Positive lookahead, assert 8 or more chars a-z or digits till end of string
(?=\\d*[a-z]) Positive lookahead to assert at least a char a-z
[a-z]* Match optional chars a-z
\\d Match at least a single digit
[a-z\\d]* Match optional chars a-z or digits
\$ End of string
Should not match
R6: 2022([A-Z0-9]{1,4})A
R7: 2022(\\d|\\w){1,3}\\wA <-- also matches 20229999A which it should not
R8: 2022\\w\\w\\s\\sA
R9 2022\\d\\d\\d\\dA`;
// 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