Comprendre profondément les expressions régulières JS --- groupement
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 la régularité. Le regroupement que je comprends est une paire de supports (). Chaque paire de supports représente un groupe, et le groupe peut être divisé en:
• Capture Grouping
• Groupe de capture
Capturer le regroupement
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). Voici évidemment 001. Mais la situation rencontrée aujourd'hui est comme ça.
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. Étant donné que par défaut, le motif de correspondance est un motif gourmand, c'est-à-dire autant que possible correspond à tout / d +, le résultat du match est 001, puis une paire de supports est ajouté à l'extérieur, ce qui signifie un regroupement, donc le résultat du match 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 puis correspond à la fin de 1. Il correspond également à la fin de ce match. Il semble qu'il n'y ait pas de différence entre la correspondance dans le premier exemple, mais le regroupement (/ D) signifie ici correspondre à un seul numéro. Selon ma compréhension précédente, il est 0, mais cette compréhension est erronée. Étant donné que le match entier est un motif gourmand, la correspondance autant que possible (/ d) dans le groupe capturera le résultat 1 du dernier match. S'il s'agit d'un motif non guéri, il ne correspondra pas 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
Le regroupement non capturant signifie qu'une paire de supports est nécessaire à certains endroits, mais ils ne veulent pas que ce soit un groupe de capture, c'est-à-dire qu'ils ne veulent pas que ce groupe soit récupéré par des fonctions comme Macth Exec. Habituellement, ils sont précédés de parenthèses (?: Motif) afin qu'il devienne un groupe non capturant.
var reg = / test (?: / d) + /; var str = 'nouveau test001 test002'; console.log (str.match (reg)); // ["test001", index: 4, entrée: "Nouveau test001 test002"]
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.
L'article ci-dessus a une compréhension approfondie des expressions régulières JS - le groupe est tout le contenu que j'ai partagé avec vous. J'espère que cela pourra vous donner une référence et j'espère que vous pourrez soutenir Wulin.com plus.