Maison >interface Web >js tutoriel >Comment puis-je faire correspondre des chaînes qui se chevauchent à l'aide d'expressions régulières ?

Comment puis-je faire correspondre des chaînes qui se chevauchent à l'aide d'expressions régulières ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-07 15:43:16381parcourir

How Can I Match Overlapping Strings Using Regular Expressions?

Faire correspondre des chaînes qui se chevauchent avec des expressions régulières

Lors de la mise en correspondance de chaînes qui se chevauchent avec une expression régulière, il est important de comprendre comment fonctionnent la méthode de correspondance et la mise en mémoire tampon des expressions régulières.

Le problème : consommer des caractères correspondants

Par défaut, la méthode de correspondance avec un indicateur global (g) dans une expression régulière, consomme les caractères correspondants et avance l'index jusqu'à la position juste après la sous-chaîne correspondante. Par exemple, l'expression régulière /d{3}/g correspondra à une séquence de trois chiffres, mais elle ne renverra qu'une seule correspondance car elle consomme les caractères correspondants.

Solution : assertions de largeur nulle

Pour faire correspondre les chaînes qui se chevauchent, vous pouvez utiliser une assertion de largeur nulle, qui est une anticipation positive avec un groupe de capture. Cette assertion teste toutes les positions dans la chaîne d'entrée et si une correspondance est trouvée, le groupe de capture capture la sous-chaîne correspondante. La propriété RegExp.lastIndex est ensuite avancée manuellement pour éviter une boucle infinie.

Utilisation de 'matchAll'

Si votre langage de programmation prend en charge la méthode matchAll, vous pouvez l'utiliser pour implémenter des assertions de largeur nulle et trouver toutes les correspondances qui se chevauchent. Par exemple, en JavaScript, le code suivant utilise matchAll pour rechercher toutes les sous-chaînes à trois chiffres qui se chevauchent dans la chaîne « 12345 » :

var re = /(?=(\d{3}))/g;
console.log(Array.from('12345'.matchAll(re), x => x[1]));

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:
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