150 votes

Créer des RegExps à la volée à l'aide de variables de type chaîne de caractères

Supposons que je veuille rendre les éléments suivants réutilisables :

function replace_foo(target, replacement) {
   return target.replace("string_to_replace",replacement);
}

Je pourrais faire quelque chose comme ça :

function replace_foo(target, string_to_replace, replacement) {
   return target.replace(string_to_replace,replacement);
}

Avec les chaînes littérales, c'est assez facile. Mais que se passe-t-il si je veux être un peu plus délicat avec l'expression rationnelle ? Par exemple, disons que je veux remplacer tout mais string_to_replace . Instinctivement, j'essaierais d'étendre ce qui précède en faisant quelque chose du genre :

function replace_foo(target, string_to_replace, replacement) {
   return target.replace(/^string_to_replace/,replacement);
}

Cela ne semble pas fonctionner. Je pense qu'il pense que string_to_replace est une chaîne littérale, plutôt qu'une variable représentant une chaîne. Est-il possible de créer des regex JavaScript à la volée en utilisant des variables de type chaîne ? Quelque chose comme ça serait génial si c'est possible :

function replace_foo(target, string_to_replace, replacement) {
   var regex = "/^" + string_to_replace + "/";
   return target.replace(regex,replacement);
}

1voto

Zhurov Konstantin Points 662

Je pense que j'ai un très bon exemple de mise en évidence d'un texte dans une chaîne de caractères (la recherche ne se fait pas à partir du registre mais la mise en évidence se fait à partir du registre).

function getHighlightedText(basicString, filterString) {

    if ((basicString === "") || (basicString === null) || (filterString === "") || (filterString === null)) return basicString;

    return basicString.replace(new RegExp(filterString.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\\\$&'), 'gi'),
        function(match)
            {return "<mark>"+match+"</mark>"});

}

http://jsfiddle.net/cdbzL/1258/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X