Échapper une chaine à utiliser dans les expressions régulières (regex)

J’essaie de créer une expression régulière en javascript basée sur l’entrée de l’utilisateur :

function searchStr(input) {
    var reg = new RegExp('' + input + '');
    // effectuer une recherche
}

Mais la regex ne fonctionnera pas correctement si l’entrée de l’utilisateur contient un ? ou un * parce qu’ils sont interprétés comme des spéciaux de regex. En fait, si l’utilisateur insère un ( ou un [ non équilibré dans sa chaîne, la regex n’est même pas valide.

Quelle est la fonction javascript qui permet d’échapper correctement tous les caractères spéciaux pour les utiliser dans les regex ?

Pour échapper une RegExp, utiliser la fonction suivante:

function escapeRegExp(string) {
    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); 
}

Exemple:

escapeRegExp("Tous ces éléments devraient être échappés: \ ^ $ * + ? . ( ) | { } [ ]");

Sortie:

"Tous ces éléments devraient être échappés: \\ \^ \$ \* \+ \? \. \( \) \| \{ \} \[ \] "