const regex = /^((a{1,4}|a?b|ba){1,3}|(a{1,3}|b){1,4}|((a{2,3}|b){2}|aaba|abaa){2})$/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^((a{1,4}|a?b|ba){1,3}|(a{1,3}|b){1,4}|((a{2,3}|b){2}|aaba|abaa){2})$', 'gm')
const str = `Allowed:
aaaaaaaaaaaa
aaaaaaaaaaa
abaaaaab
baaaaaba
abaaaaba
bbbb
bababa
ababab
aabaabaa
abaabaaa
baaaaaab
baaaaab
baaaaaaaaa
abaaaaaaaa
aabaaaaaaa
aaabaaaaaa
aaaabaaaaa
aaaaabaaaa
aaaaaabaaa
aaaaaaabaa
aaaaaaaaba
aaaaaaaaab
baaaaaba
abaaaaab
babaaaaa
ababaaaa
aababaaa
aaaababa
aaaaabab
baaaabaa
abaaaaba
aabaaaab
baabaaaa
abaabaaa
aabaabaa
aaabaaba
baaaaba
abaaaab
babaaaa
ababaaa
aababaa
aaababa
abba
abbb
bababa
bbaab
abbab
abaabb
baaabaa
abaaaba
aabaaab
baabaaa
abaabaa
abaabaa
aabaaba
Disallowed:
aaaaaaaaaaaaa
aabaabaaa
aababab
bbbba
bbabb
baaaaaaab`;
// 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