Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Rétro-référence nommée : \k<name>

Baseline
Large disponibilité

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2020.

Une rétro-référence nommée (named backreference en anglais) fait référence à la sous-correspondance d'un groupe capturant nommé précédent et correspond au même texte que ce groupe. Pour les groupes capturant non nommés, vous devez utiliser la syntaxe normale de rétro-référence.

Syntaxe

regex
\k<name>

Paramètres

name

Le nom du groupe. Doit être un identifiant valide et faire référence à un groupe capturant nommé existant.

Description

Les rétro-références nommées sont très similaires aux rétro-références normales : elles font référence au texte correspondant à un groupe capturant et correspondent au même texte. La différence est que vous faites référence au groupe capturant par son nom plutôt que par son numéro. Cela rend l'expression rationnelle plus lisible et plus facile à re-factoriser et à maintenir.

En mode non sensible à l'Unicode, la séquence \k ne démarre une rétro-référence nommée que si l'expression rationnelle contient au moins un groupe capturant nommé. Sinon, il s'agit d'une échappement d'identité et c'est la même chose que le caractère littéral k. Il s'agit d'une syntaxe obsolète pour la compatibilité web, et vous ne devez pas vous y fier.

js
/\k/.test("k"); // true

Exemples

Faire correspondre les guillemets

La fonction suivante correspond aux motifs title='xxx' et title="xxx" dans une chaîne de caractères. Pour vérifier que les guillemets correspondent, nous utilisons une rétro-référence au premier guillemet. L'accès au deuxième groupe capturant ([2]) retourne la chaîne de caractères comprise entre les guillemets correspondants :

js
function analyserTitre(chaineDeCaracteresMeta) {
  return chaineDeCaracteresMeta.match(/title=(?<quote>["'])(.*?)\k<quote>/)[2];
}

analyserTitre('title="toto"'); // 'toto'
analyserTitre("title='toto' lang='en'"); // 'toto'
analyserTitre('title="Avantages des groupes capturant nommés"'); // "Avantages des groupes capturant nommés"

Spécifications

Spécification
ECMAScript® 2027 Language Specification
# prod-AtomEscape

Compatibilité des navigateurs

Voir aussi