web-dev-qa-db-fra.com

Javascript replace method, replace with "$ 1"

Je lis le livre Sitepoints 2007 "Simply Javascript" et j'ai rencontré du code que je ne comprends tout simplement pas.

C'est le code suivant:

Core.removeClass = function(target, theClass)
{
    var pattern = new RegExp("(^| )" + theClass + "( |$)");
    target.className = target.className.replace(pattern, "$1");
    target.className = target.className.replace(/ $/, "");
};

Le premier appel à la méthode replace est ce qui me laisse perplexe, je ne comprends pas d'où vient la valeur "$ 1" ni ce que cela signifie. Je voudrais penser que l'appel devrait remplacer le motif trouvé par "".

42
Niels Bom

Chaque paire de parenthèses (...) où le premier caractère n'est pas un ? * est un "groupe de capture", qui place son résultat dans $1, $2, $3, etc. qui peut être utilisé dans le modèle de remplacement.

Vous pourriez également voir la même chose que \1, \2, \3 dans d'autres moteurs d'expression régulière (ou même dans l'expression originale parfois, pour la répétition)

Celles-ci sont appelées "références arrières", car elles renvoient généralement à une partie (antérieure) de l'expression.

(*Le ? indique diverses formes de comportement spécial, y compris un groupe non capturant qui est (?:...) et simplement regrouper sans capturer.)


Dans votre exemple spécifique, le $ 1 sera le groupe (^| ) qui est "la position du début de la chaîne (largeur nulle), ou un seul espace".

Donc, en remplaçant l'expression entière par cela, vous supprimez essentiellement la variable theClass et potentiellement un espace après. (L'expression finale ( |$) est l'inverse - un espace ou la position de fin de chaîne - et comme sa valeur n'est pas utilisée, il aurait pu ne pas être capturé avec (?: |$) au lieu.)


J'espère que cela explique tout ok - faites-moi savoir si vous voulez plus d'informations.

En outre, voici quelques lectures supplémentaires sur le site regular-expressions.info :

60
Peter Boughton

1 $ est une référence arrière. Il sera remplacé par le premier groupe de correspondance (ensemble de parenthèses) dans vos correspondances d'expression régulière.

9
Dagg Nabbit