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:
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?
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.
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");
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.
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
.
$ 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.