JavaScript – Interpolación de cadenas dentro de expresiones regulares

Cuando necesita sustituir una variable dentro de una expresión regular, no puede usar la interpolación de cadenas habitual en JavaScript. Tienes que crear un objeto RegExp.

Digamos que tienes una expresión regular compleja como /^(?!.*(\w{2}).*\1)\s*(?:(?:en|de|fr|it|es)\b\s*){5}$/ y necesita manipular dinámicamente las partes (?:en|de|fr|it|es) y {5}.

No olvides escapar de las barras invertidas.

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}$/

Ejemplo para String.replace()

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

Fuente