Maison > interface Web > js tutoriel > Comment accéder correctement aux groupes correspondants dans les expressions régulières JavaScript ?

Comment accéder correctement aux groupes correspondants dans les expressions régulières JavaScript ?

Barbara Streisand
Libérer: 2024-12-26 13:08:14
original
226 Les gens l'ont consulté

How to Correctly Access Matched Groups in JavaScript Regular Expressions?

Comment accéder aux groupes correspondants dans une expression régulière JavaScript

L'accès aux sous-groupes capturés par une expression régulière en JavaScript peut être réalisé à l'aide de la méthode exec(). Cette méthode renvoie un objet de type Array contenant les correspondances effectuées par l'expression.

Pour illustrer, considérons l'exemple suivant :

var myString = "something format_abc"; // Obtain "abc"

const arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString);

console.log(arr); // Outputs: [" format_abc", "abc"]
console.log(arr[1]); // Outputs: undefined (the issue)
console.log(arr[0]); // Outputs: format_undefined (another issue)
Copier après la connexion

Le résultat attendu est d'obtenir le sous-groupe "abc" comme deuxième élément du tableau arr. Cependant, accéder à arr[1] et arr[0] conduit respectivement à des valeurs indéfinies et incorrectes.

Résolution de la sortie non définie :

L'absence de valeur dans arr[1] est dû au .*? quantificateur non gourmand utilisé dans l’expression régulière. Ce quantificateur capture le nombre minimum de caractères possible, ce qui donne la chaîne "format_abc" sans le délimiteur.

Pour résoudre ce problème, utilisez plutôt un quantificateur glouton .* :

/(?:^|\s)format_(.*)(?:\s|$)/
Copier après la connexion

Correction de la sortie de chaîne incorrecte :

Le problème arr[0] résulte de l'utilisation du formatage de type printf de la console. Le caractère spécial % dans format_%A a tenté de remplacer la valeur du paramètre suivant, qui manquait.

Pour résoudre ce problème, échappez le % dans l'expression régulière :

/(?:^|\s)format_(.*?)(?:\s|$)/
Copier après la connexion

Avec ces modifications, le résultat correct est obtenu :

[" format_abc", "abc"]
console.log(arr[1]); // Outputs: "abc"
console.log(arr[0]); // Outputs: " format_abc"
Copier après la connexion

Accès aux groupes correspondants via matchAll() (ECMAScript 2020 et Plus tard) :

La méthode String.prototype.matchAll() fournit une approche moderne et plus intuitive pour itérer sur plusieurs correspondances dans une chaîne. Il renvoie un itérateur qui peut être utilisé comme suit :

const string = "something format_abc";
const regexp = /(?:^|\s)format_(.*?)(?:\s|$)/g;
const matches = string.matchAll(regexp);

for (const match of matches) {
  console.log(match);
  console.log(match.index);
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal