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
Libérer: 2024-12-07 15:43:16
original
391 Les gens l'ont consulté

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]));
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!

source:php.cn
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