const regex = /(?m)^(?=(?:(?:(?(1)(?!))(.)|(?(2)(?!))(?!\1)(.)|(?(3)(?!))(?!\1|\2)(.)|(?(4)(?!))(?!\1|\2|\3)(.)|(?(5)(?!))(?!\1|\2|\3|\4)(.)|(?(6)(?!))(?!\1|\2|\3|\4|\5)(.)|(?(7)(?!))(?!\1|\2|\3|\4|\5|\6)(.)|(?(8)(?!))(?!\1|\2|\3|\4|\5|\6|\7)(.)|(?(9)(?!))(?!\1|\2|\3|\4|\5|\6|\7|\8)(.))\S*?){1,9}$)(?=(?:\1|\2|\3|\4|\5|\6|\7|\8|\9)*$)(?(DEFINE)(?<one>(?:(?!\1).)*\1)(?<two>(?:(?!\2).)*\2)(?<three>(?:(?!\3).)*\3)(?<four>(?:(?!\4).)*\4)(?<five>(?:(?!\5).)*\5)(?<six>(?:(?!\6).)*\6)(?<seven>(?:(?!\7).)*\7)(?<eight>(?:(?!\8).)*\8)(?<nine>(?:(?!\9).)*\9))(?:(?(1)(?=(?&one){1}(?!.*\1))(?(2)(?=(?&two){1}(?!.*\2))(?(3)(?=(?&three){1}(?!.*\3))(?(4)(?=(?&four){1}(?!.*\4))(?(5)(?=(?&five){1}(?!.*\5))(?(6)(?=(?&six){1}(?!.*\6))(?(7)(?=(?&seven){1}(?!.*\7))(?(8)(?=(?&eight){1}(?!.*\8))(?(9)(?=(?&nine){1}(?!.*\9)))))))))))|(?(1)(?=(?&one){2}(?!.*\1))(?(2)(?=(?&two){2}(?!.*\2))(?(3)(?=(?&three){2}(?!.*\3))(?(4)(?=(?&four){2}(?!.*\4))(?(5)(?=(?&five){2}(?!.*\5))(?(6)(?=(?&six){2}(?!.*\6))(?(7)(?=(?&seven){2}(?!.*\7))(?(8)(?=(?&eight){2}(?!.*\8))(?(9)(?=(?&nine){2}(?!.*\9)))))))))))|(?(1)(?=(?&one){3}(?!.*\1))(?(2)(?=(?&two){3}(?!.*\2))(?(3)(?=(?&three){3}(?!.*\3))(?(4)(?=(?&four){3}(?!.*\4))(?(5)(?=(?&five){3}(?!.*\5))(?(6)(?=(?&six){3}(?!.*\6))(?(7)(?=(?&seven){3}(?!.*\7))(?(8)(?=(?&eight){3}(?!.*\8))(?(9)(?=(?&nine){3}(?!.*\9)))))))))))|(?(1)(?=(?&one){4}(?!.*\1))(?(2)(?=(?&two){4}(?!.*\2))(?(3)(?=(?&three){4}(?!.*\3))(?(4)(?=(?&four){4}(?!.*\4))(?(5)(?=(?&five){4}(?!.*\5))(?(6)(?=(?&six){4}(?!.*\6))(?(7)(?=(?&seven){4}(?!.*\7))(?(8)(?=(?&eight){4}(?!.*\8))(?(9)(?=(?&nine){4}(?!.*\9)))))))))))|(?(1)(?=(?&one){5}(?!.*\1))(?(2)(?=(?&two){5}(?!.*\2))(?(3)(?=(?&three){5}(?!.*\3))(?(4)(?=(?&four){5}(?!.*\4))(?(5)(?=(?&five){5}(?!.*\5))(?(6)(?=(?&six){5}(?!.*\6))(?(7)(?=(?&seven){5}(?!.*\7))(?(8)(?=(?&eight){5}(?!.*\8))(?(9)(?=(?&nine){5}(?!.*\9)))))))))))|(?(1)(?=(?&one){6}(?!.*\1))(?(2)(?=(?&two){6}(?!.*\2))(?(3)(?=(?&three){6}(?!.*\3))(?(4)(?=(?&four){6}(?!.*\4))(?(5)(?=(?&five){6}(?!.*\5))(?(6)(?=(?&six){6}(?!.*\6))(?(7)(?=(?&seven){6}(?!.*\7))(?(8)(?=(?&eight){6}(?!.*\8))(?(9)(?=(?&nine){6}(?!.*\9)))))))))))|(?(1)(?=(?&one){7}(?!.*\1))(?(2)(?=(?&two){7}(?!.*\2))(?(3)(?=(?&three){7}(?!.*\3))(?(4)(?=(?&four){7}(?!.*\4))(?(5)(?=(?&five){7}(?!.*\5))(?(6)(?=(?&six){7}(?!.*\6))(?(7)(?=(?&seven){7}(?!.*\7))(?(8)(?=(?&eight){7}(?!.*\8))(?(9)(?=(?&nine){7}(?!.*\9)))))))))))|(?(1)(?=(?&one){8}(?!.*\1))(?(2)(?=(?&two){8}(?!.*\2))(?(3)(?=(?&three){8}(?!.*\3))(?(4)(?=(?&four){8}(?!.*\4))(?(5)(?=(?&five){8}(?!.*\5))(?(6)(?=(?&six){8}(?!.*\6))(?(7)(?=(?&seven){8}(?!.*\7))(?(8)(?=(?&eight){8}(?!.*\8))(?(9)(?=(?&nine){8}(?!.*\9)))))))))))|(?(1)(?=(?&one){9}(?!.*\1))(?(2)(?=(?&two){9}(?!.*\2))(?(3)(?=(?&three){9}(?!.*\3))(?(4)(?=(?&four){9}(?!.*\4))(?(5)(?=(?&five){9}(?!.*\5))(?(6)(?=(?&six){9}(?!.*\6))(?(7)(?=(?&seven){9}(?!.*\7))(?(8)(?=(?&eight){9}(?!.*\8))(?(9)(?=(?&nine){9}(?!.*\9)))))))))))).*/g;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?m)^(?=(?:(?:(?(1)(?!))(.)|(?(2)(?!))(?!\\1)(.)|(?(3)(?!))(?!\\1|\\2)(.)|(?(4)(?!))(?!\\1|\\2|\\3)(.)|(?(5)(?!))(?!\\1|\\2|\\3|\\4)(.)|(?(6)(?!))(?!\\1|\\2|\\3|\\4|\\5)(.)|(?(7)(?!))(?!\\1|\\2|\\3|\\4|\\5|\\6)(.)|(?(8)(?!))(?!\\1|\\2|\\3|\\4|\\5|\\6|\\7)(.)|(?(9)(?!))(?!\\1|\\2|\\3|\\4|\\5|\\6|\\7|\\8)(.))\\S*?){1,9}$)(?=(?:\\1|\\2|\\3|\\4|\\5|\\6|\\7|\\8|\\9)*$)(?(DEFINE)(?<one>(?:(?!\\1).)*\\1)(?<two>(?:(?!\\2).)*\\2)(?<three>(?:(?!\\3).)*\\3)(?<four>(?:(?!\\4).)*\\4)(?<five>(?:(?!\\5).)*\\5)(?<six>(?:(?!\\6).)*\\6)(?<seven>(?:(?!\\7).)*\\7)(?<eight>(?:(?!\\8).)*\\8)(?<nine>(?:(?!\\9).)*\\9))(?:(?(1)(?=(?&one){1}(?!.*\\1))(?(2)(?=(?&two){1}(?!.*\\2))(?(3)(?=(?&three){1}(?!.*\\3))(?(4)(?=(?&four){1}(?!.*\\4))(?(5)(?=(?&five){1}(?!.*\\5))(?(6)(?=(?&six){1}(?!.*\\6))(?(7)(?=(?&seven){1}(?!.*\\7))(?(8)(?=(?&eight){1}(?!.*\\8))(?(9)(?=(?&nine){1}(?!.*\\9)))))))))))|(?(1)(?=(?&one){2}(?!.*\\1))(?(2)(?=(?&two){2}(?!.*\\2))(?(3)(?=(?&three){2}(?!.*\\3))(?(4)(?=(?&four){2}(?!.*\\4))(?(5)(?=(?&five){2}(?!.*\\5))(?(6)(?=(?&six){2}(?!.*\\6))(?(7)(?=(?&seven){2}(?!.*\\7))(?(8)(?=(?&eight){2}(?!.*\\8))(?(9)(?=(?&nine){2}(?!.*\\9)))))))))))|(?(1)(?=(?&one){3}(?!.*\\1))(?(2)(?=(?&two){3}(?!.*\\2))(?(3)(?=(?&three){3}(?!.*\\3))(?(4)(?=(?&four){3}(?!.*\\4))(?(5)(?=(?&five){3}(?!.*\\5))(?(6)(?=(?&six){3}(?!.*\\6))(?(7)(?=(?&seven){3}(?!.*\\7))(?(8)(?=(?&eight){3}(?!.*\\8))(?(9)(?=(?&nine){3}(?!.*\\9)))))))))))|(?(1)(?=(?&one){4}(?!.*\\1))(?(2)(?=(?&two){4}(?!.*\\2))(?(3)(?=(?&three){4}(?!.*\\3))(?(4)(?=(?&four){4}(?!.*\\4))(?(5)(?=(?&five){4}(?!.*\\5))(?(6)(?=(?&six){4}(?!.*\\6))(?(7)(?=(?&seven){4}(?!.*\\7))(?(8)(?=(?&eight){4}(?!.*\\8))(?(9)(?=(?&nine){4}(?!.*\\9)))))))))))|(?(1)(?=(?&one){5}(?!.*\\1))(?(2)(?=(?&two){5}(?!.*\\2))(?(3)(?=(?&three){5}(?!.*\\3))(?(4)(?=(?&four){5}(?!.*\\4))(?(5)(?=(?&five){5}(?!.*\\5))(?(6)(?=(?&six){5}(?!.*\\6))(?(7)(?=(?&seven){5}(?!.*\\7))(?(8)(?=(?&eight){5}(?!.*\\8))(?(9)(?=(?&nine){5}(?!.*\\9)))))))))))|(?(1)(?=(?&one){6}(?!.*\\1))(?(2)(?=(?&two){6}(?!.*\\2))(?(3)(?=(?&three){6}(?!.*\\3))(?(4)(?=(?&four){6}(?!.*\\4))(?(5)(?=(?&five){6}(?!.*\\5))(?(6)(?=(?&six){6}(?!.*\\6))(?(7)(?=(?&seven){6}(?!.*\\7))(?(8)(?=(?&eight){6}(?!.*\\8))(?(9)(?=(?&nine){6}(?!.*\\9)))))))))))|(?(1)(?=(?&one){7}(?!.*\\1))(?(2)(?=(?&two){7}(?!.*\\2))(?(3)(?=(?&three){7}(?!.*\\3))(?(4)(?=(?&four){7}(?!.*\\4))(?(5)(?=(?&five){7}(?!.*\\5))(?(6)(?=(?&six){7}(?!.*\\6))(?(7)(?=(?&seven){7}(?!.*\\7))(?(8)(?=(?&eight){7}(?!.*\\8))(?(9)(?=(?&nine){7}(?!.*\\9)))))))))))|(?(1)(?=(?&one){8}(?!.*\\1))(?(2)(?=(?&two){8}(?!.*\\2))(?(3)(?=(?&three){8}(?!.*\\3))(?(4)(?=(?&four){8}(?!.*\\4))(?(5)(?=(?&five){8}(?!.*\\5))(?(6)(?=(?&six){8}(?!.*\\6))(?(7)(?=(?&seven){8}(?!.*\\7))(?(8)(?=(?&eight){8}(?!.*\\8))(?(9)(?=(?&nine){8}(?!.*\\9)))))))))))|(?(1)(?=(?&one){9}(?!.*\\1))(?(2)(?=(?&two){9}(?!.*\\2))(?(3)(?=(?&three){9}(?!.*\\3))(?(4)(?=(?&four){9}(?!.*\\4))(?(5)(?=(?&five){9}(?!.*\\5))(?(6)(?=(?&six){9}(?!.*\\6))(?(7)(?=(?&seven){9}(?!.*\\7))(?(8)(?=(?&eight){9}(?!.*\\8))(?(9)(?=(?&nine){9}(?!.*\\9)))))))))))).*', 'g')
const str = `------------------------------
match_words =
------------------------------
arraigning
nonordered
abadbacdcacbdbdc
mesosome
ananna
unendued
tromometer
caucasus
intestines
i
deed
horseshoer
happenchance
reappear
deeded
pullup
arraigning
testes
mononymy
scintillescent
couscous
------------------------------
not_match_words =
------------------------------
edified
unreverberating
underpass
interinsert
pilfered
nippiness
gregarinian
deicide
nonaristocratic
rototiller
ozonizing
museums
backbreaker
interradiated
antistalling
naturalize
equitriangular
reparticipate
ppd
miasmas
cabbage
`;
// 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