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 !