const regex = new RegExp('\\{\\{ *(ab|cd|ef|gh) *\\}\\} *\\{\\{ *(ab|cd|ef|gh) *\\}\\} *(\\{\\{ *(ab|cd|ef|gh) *\\}\\})* *(\\{\\{ *(ab|cd|ef|gh) *\\}\\})* *(\\{\\{ *(ab|cd|ef|gh) *\\}\\})* *(\\{\\{ *(ab|cd|ef|gh) *\\}\\})*', 'gm')
const str = `{{ab}}{{ab}}{{ab}}{{ab}}{{ab}}{{ab}}
{{ab}} {{ab}} {{ab}} {{ab}} {{ab}} {{ab}}
machintruc {{ab}} {{cd}}
{{ab}} {{cd}} {{ef}} [https://truc.org truc]
{{ab}}{{ cd }}{{ ef }} {{ gh }} {{ gh }}{{lien web|url=tr.uc}}
{{mr}} Trucmuche
`;
const subst = `{{mul|$1|$2|$4|$6|$8|$10}} `;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
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