const regex = new RegExp('(?!(?<=pla)ng)(?!(?<=a)nlag)(?!(?<=i)nvest|nfo|nfra)(?!(?<=zuku)nft)nn?(?!finiti)[bcfgjklmpqrsvwxy](?!chaft|ormatio|eg(t|ung|e|s|itiv))', 'gmi')
const str = `MATCH:
nonsense|waning|cannnnns|banger|fancy
NO MATCH:
plang|anlag|invest|warn|zukunft|design|mënsch|längt|telefo|termin|ioun|immun
plangens
pplang|clanlags|infrared|amazukunft
cannon|wand|hone|banana
BUT: Zukunftsunpassung (should match 'unpass' but not 'zukunft' and not 'ung')
Eegenschaftsunklang (should match 'Unkl' but not 'Eegenschaft' and not 'klang')`;
// 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