Accéder aux groupements correspondants dans les expressions régulières JavaScript
Lors de l'utilisation d'expressions régulières pour faire correspondre des modèles dans des chaînes, il est souvent souhaitable d'accéder à des parties spécifiques du texte correspondant. JavaScript propose plusieurs façons d'y parvenir.
Dans votre exemple, vous avez correctement utilisé une expression régulière avec des parenthèses pour capturer une partie de la chaîne. Cependant, le problème que vous avez rencontré ne concernait pas l'expression régulière elle-même, mais la façon dont vous accédiez aux groupes correspondants.
Accès aux groupes avec .exec()
Le fichier . La méthode exec() renvoie un tableau contenant la totalité de la chaîne correspondante comme premier élément, suivi de tous les groupes capturés. Pour accéder au premier groupe capturé (la partie "abc" dans votre exemple), vous utiliserez arr[1] :
let myString = "something format_abc"; let arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString); console.log(arr[1]); // Prints: abc
Utilisation de groupes de capture nommés
Vous pouvez également nommer vos groupes de capture à l'aide d'une syntaxe d'expressions régulières telle que (?
let myString = "something format_abc"; let arr = /(?:^|\s)format_(?<text>.*?)(?:\s|$)/.exec(myString); console.log(arr.groups.text); // Prints: abc
Syntaxe alternative avec des groupes de capture nommés :
Dans ECMAScript 2018, vous pouvez utiliser une syntaxe légèrement différente syntaxe pour les groupes de capture nommés, en entourant le nom du groupe en bouclé accolades :
let myString = "something format_abc"; let arr = /(?:^|\s)format_({text}.*?)(?:\s|$)/.exec(myString); console.log(arr.groups.text); // Prints: abc
Faire correspondre plusieurs occurrences avec .matchAll()
La méthode .matchAll() a été introduite dans ECMAScript 2020 et fournit une API basée sur un itérateur pour faire correspondre plusieurs occurrences d'un modèle dans une chaîne. Il renvoie un itérateur qui génère des résultats de correspondance sous forme de tableau pour chaque correspondance, et vous pouvez accéder aux groupes capturés dans chaque résultat.
Pour utiliser .matchAll() dans votre exemple :
let myString = "something format_abc and something format_xyz"; let matches = myString.matchAll(/(?:^|\s)format_(.*?)(?:\s|$)/g); for (let match of matches) { console.log(match[1]); // Prints: abc, then xyz }
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!