JavaScript – Interpolation de chaînes dans les expressions régulières

Lorsque vous devez remplacer une variable à l'intérieur d'une expression régulière, vous ne pouvez pas utiliser l'interpolation de chaîne habituelle en JavaScript. Vous devez créer un objet RegExp.

Supposons que vous ayez une expression rationnelle complexe comme /^(?!.*(\w{2}).*\1)\s*(?:(?:en|de|fr|it|es)\b\s*){5}$/ et vous devez manipuler dynamiquement les parties (?:en|de|fr|it|es) et {5}.

N'oubliez pas d'échapper aux barres obliques inverses.

function generate_regex(array) {
  return new RegExp(
    `^(?!.*(\\w{2}).*\\1)\\s*(?:(?:${array.join('|')})\\b\\s*){${
      array.length
    }}$`
  )
}

generate_regex(['en', 'de', 'fr', 'it', 'es'])

/^(?!.*(\w{2}).*\1)\s*(?:(?:en|de|fr|it|es)\b\s*){5}$/


generate_regex(['en', 'de', 'fr'])

/^(?!.*(\w{2}).*\1)\s*(?:(?:en|de|fr)\b\s*){3}$/

Exemple pour String.replace()

const replace = 'regex'
const regex = new RegExp(replace, 'g')
'mystring'.replace(regex, 'newstring')

Source