web-dev-qa-db-fra.com

Comment expliquer "$ 1, $ 2" en Javascript avec une expression régulière?

Un morceau de code Javascript est comme suit:

    num="11222333";
    re = /(\d+)(\d{3})/;
    re.test(num);
    num.replace(re, "$1,$2");

Je ne comprenais pas la grammaire de "1 $, 2 $". Le livre d'où provient ce code indique que $ 1 signifie RegExp. 1 $, 2 $ signifie RegExp. 2 $. Mais ces explications conduisent à plus de questions:

  1. On sait qu'en Javascript, le nom des variables doit commencer par lettre ou _, comment $ 1 peut-il être un nom valide de variable membre de RegExp ici?

  2. Si j'entre $ 1, la ligne de commande dit que ce n'est pas défini; si je saisis "$ 1", la ligne de commande n'échoiera que $ 1, pas 11222. Comment la méthode de remplacement sait-elle ce que "$ 1, $ 2" signifie?

Je vous remercie.

14
user2384994

Ce n'est pas une "variable" - c'est un espace réservé utilisé dans l'appel .replace(). $n représente le groupe de capture nth de l'expression régulière.

num="11222333";

// This regex captures the last 3 digits as capture group #2
// and all preceding digits as capture group #1
re = /(\d+)(\d{3})/;

re.test(num);

// This replace call replaces the match of the regex (which happens
// to match everything) with the first capture group ($1) followed by
// a comma, followed by the second capture group ($2)
num.replace(re, "$1,$2");
26
voithos

Vous interprétez mal cette ligne de code. Vous devez considérer la chaîne "$1,$2" comme spécificateur de format utilisé en interne par la fonction replace pour savoir quoi faire. Il utilise l'expression régulière précédemment testée, qui a donné 2 résultats (deux blocs entre parenthèses), et reformate les résultats. $1 fait référence à la première correspondance, $2 à la seconde. Le contenu attendu de la chaîne num est donc 11222,333 après ce bit de code.

3
Niels Keurentjes

On sait qu'en Javascript, le nom des variables doit commencer par lettre ou _,

Non ce n'est pas. $1 est une variable parfaitement valide. Vous devez d'abord l'assigner:

$variable = "this is a test"

Voici comment jQuery utilise une variable appelée $ comme alias de l’objet jQuery.

2
meagar

$ 1 est le premier groupe de votre expression régulière, $ 2 est le second. Les groupes sont définis entre parenthèses. Votre premier groupe ($ 1) correspond donc à tout ce qui correspond à (\ d +). Vous aurez besoin de lire des expressions régulières pour comprendre ce qui correspond.

On sait qu'en Javascript, le nom des variables doit commencer par lettre ou _, comment $ 1 peut-il être un nom valide de variable membre de RegExp ici? 

Ce n'est pas vrai $ est un nom de variable valide tel que $ 1. Vous pouvez le découvrir simplement en l'essayant. Voir jQuery et de nombreux autres frameworks.

2
Mark Chorley