J'ai déjà écrit un article sur le début des expressions régulières. Je pensais que je connaissais relativement les expressions régulières, mais aujourd'hui, j'ai rencontré un autre piège. C'était peut-être parce que je ne faisais pas assez attention. Aujourd'hui, je me concentrerai sur le partage avec vous le regroupement dans des expressions régulières JavaScript. Si vous ne comprenez pas suffisamment les expressions régulières de JS, vous pouvez cliquer ici pour en savoir plus.
Le regroupement est assez largement utilisé dans les règles régulières. Le regroupement que je comprends est une paire de supports (), et chaque paire de supports représente un groupe.
Le regroupement peut être divisé en:
La capture de regroupement obtiendra les résultats du regroupement correspondant sous la forme d'un deuxième terme et d'un troisième terme dans une fonction telle que Match Exec. Jetons un coup d'œil à un exemple d'abord
var reg = / test (/ d +) /; var str = 'nouveau test001 test002'; console.log (str.match (reg)); // ["test001", "001", index: 4, entrée: "Nouveau test001 test002"]
Dans le code (/ d +) est un groupe (certaines personnes l'appellent également sous-motif), mais elles représentent toutes la même signification. Dans l'exemple ci-dessus, Test001 est le résultat de la correspondance exacte.
Cependant, l'appariement du groupe est de trouver des caractères correspondant au sous-motif / d + à partir de l'ensemble du résultat de la correspondance exacte (c'est-à-dire Test001). Ici, c'est évidemment 001.
Mais c'est ce que j'ai rencontré aujourd'hui
var reg = / test (/ d) + /; var str = 'nouveau test001 test002'; console.log (str.match (reg)); // ["test001", "1", index: 4, entrée: "Nouveau test001 test002"]
La différence est que (/ d +) est modifié en (/ d) +, et le résultat de correspondance entier est toujours Test001, mais le résultat de la première correspondance de groupe est différent.
Jetons un coup d'œil à leurs différences
(/ d +) Il s'agit d'une situation de regroupement, car par défaut, les modèles de correspondance sont des modèles gourmands, c'est-à-dire autant de correspondances que possible
Le résultat de toutes les correspondances / d + est 001. Ensuite, une paire de supports est ajoutée à l'extérieur, ce qui signifie un groupe, donc le résultat de la correspondance dans le premier groupe est 001.
Regardons (/ d) + dans le deuxième exemple. C'est aussi un motif gourmand. Tout d'abord, il correspondra d'abord à 0 puis à 0 et correspondra également à la fin de 1.
Il semble qu'il n'y ait pas de différence par rapport à la correspondance dans le premier exemple, mais le groupe (/ D) signifie ici correspondre à un seul numéro.
Selon ma compréhension précédente, le résultat que le match était de 0 au début était de 0, mais cette compréhension est erronée. Puisque le match entier est un motif gourmand, correspond autant que possible
(/ d) dans le groupe capturera le dernier résultat apparié 1
S'il s'agit d'un modèle non guédie, il correspondra le moins possible
var reg = / test (/ d) +? /; var str = 'nouveau test001 test002'; console.log (str.match (reg)); // ["test001", "0", index: 4, entrée: "Nouveau test001 test002"]
De cette façon, le résultat correspondant (/ d) est 0. Bien qu'il y ait encore des résultats qui peuvent être appariés plus tard, voici pour correspondre aussi peu que possible
Groupement non capturant
var reg = / test (?: / d) + /; var str = 'nouveau test001 test002'; console.log (str.match (reg)); // ["test001", index: 4, entrée: "Nouveau test001 test002"]
Le regroupement non capturant signifie qu'une paire de supports est nécessaire à certains endroits, mais ils ne veulent pas que ce soit un regroupement de capture, ce qui signifie qu'ils ne veulent pas que ce groupe soit obtenu par des fonctions comme Macth Exec.
Habituellement, l'ajout ?: (?: Modèle) à l'intérieur du support devient un groupe non capture.
De cette façon, il n'y aura pas de correspondance de contenu dans le résultat du match du match, ce qui signifie que le deuxième élément est manquant.
Cet article se concentre sur l'explication de la différence entre (/ d +) et (/ d) +, qui est également la fosse sur laquelle j'ai marché aujourd'hui. S'il y a des erreurs, n'hésitez pas à les corriger.