Maison > interface Web > js tutoriel > Explication détaillée du regroupement dans les expressions régulières javascript

Explication détaillée du regroupement dans les expressions régulières javascript

高洛峰
Libérer: 2017-01-20 13:47:05
original
1532 Les gens l'ont consulté

J'ai déjà écrit un article sur la prise en main des expressions régulières. Je pensais avoir une relativement bonne compréhension des expressions régulières, mais aujourd'hui, j'ai rencontré un autre piège. C'est peut-être parce que je ne suis pas assez prudent. Aujourd'hui, je vais me concentrer sur le partage. javascript avec vous. Regroupement en expressions régulières. Si vous ne comprenez pas suffisamment les expressions régulières JS, vous pouvez cliquer ici pour en savoir plus. Le regroupement

est largement utilisé dans les expressions régulières. Le regroupement que je comprends est une paire de parenthèses (). Chaque paire de parenthèses représente un regroupement

peut être divisé en :

Regroupement de capture

Regroupement sans capture

Regroupement de capture


Le regroupement de capture sera utilisé dans des choses comme match exec Dans la fonction, le groupe correspondant les résultats sont obtenus sous la forme du deuxième item et du troisième item. Regardons d'abord un exemple

var reg = /test(\d+)/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", "001", index: 4, input: "new test001 test002"]
Copier après la connexion

(d) dans le code est un groupe (certaines personnes l'appellent aussi un sous-modèle), mais tout cela signifie la même signification, ce qui précède Dans l'exemple, test001 est le résultat de la correspondance exacte,

Cependant, la correspondance groupée consiste à trouver les caractères correspondant au sous-modèle d à partir de l'ensemble du résultat de la correspondance exacte (c'est-à-dire test001), qui est évidemment 001.

Mais la situation que j'ai rencontrée aujourd'hui est la suivante

var reg = /test(\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", "1", index: 4, input: "new test001 test002"]
Copier après la connexion

La différence est que (d) a été remplacé par (d), le résultat complet de la correspondance est toujours test001 , mais le résultat de la correspondance du premier groupe est différent.


Analysons leurs différences lentement

(d) Il s'agit d'une situation de regroupement, car par défaut le mode de correspondance est le mode gourmand, ce qui signifie autant que possible Pour faire correspondre

tous les d, le résultat correspondant est 001, puis une paire de parenthèses est ajoutée à l'extérieur, qui est un groupe, donc le résultat correspondant dans le premier groupe est 001.

Regardons le deuxième exemple (d) dans (d) est aussi un motif gourmand. Il correspondra d'abord à 0, puis à 0, puis à 1 à la fin. Il correspondra également jusqu'à la fin du match


ressemble au premier. un. Il n'y a aucune différence dans la correspondance dans l'exemple, mais le regroupement (d) signifie ici faire correspondre un seul nombre


D'après ma compréhension précédente, il correspondra au premier résultat correspondant, qui. est 0. Mais cette compréhension est fausse. Étant donné que l'ensemble de la correspondance est un mode gourmand, faire correspondre autant de (d) que possible dans le groupe


capturera le dernier résultat correspondant 1

s'il s'agit d'un mode non gourmand. mode, alors j'essaierai de faire correspondre

var reg = /test(\d)+?/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
 
//["test001", "0", index: 4, input: "new test001 test002"]
Copier après la connexion

le moins possible De cette façon, le résultat correspondant de (d) est 0. Bien qu'il y ait encore des résultats correspondants plus tard, ici. sont aussi peu nombreux que possible. Match

Regroupement sans capture

var reg = /test(?:\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", index: 4, input: "new test001 test002"]
Copier après la connexion

Le regroupement sans capture signifie qu'une paire de parenthèses est nécessaire à certains endroits, mais vous je ne veux pas qu'il devienne une capture Le regroupement signifie que vous ne voulez pas que ce groupe soit obtenu par des fonctions comme macth exec

ajoutez généralement ?: devant les parenthèses, c'est-à-dire (?:motif ), qui devient un regroupement sans capture,

De cette façon, le contenu correspondant groupé n'apparaîtra pas dans le résultat du match, c'est-à-dire que le deuxième élément 1 est manquant

Cet article. se concentre sur (d) et (d) La différence est aussi le piège sur lequel j'ai marché aujourd'hui. S'il y a des erreurs, veuillez me corriger.

Pour des explications plus détaillées sur le regroupement dans les expressions régulières javascript et les articles connexes, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal