Maison >interface Web >js tutoriel >Comment puis-je utiliser Regex pour rechercher des correspondances qui se chevauchent dans une chaîne ?

Comment puis-je utiliser Regex pour rechercher des correspondances qui se chevauchent dans une chaîne ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-06 05:19:10943parcourir

How Can I Use Regex to Find Overlapping Matches in a String?

Correspondance de chaînes superposées avec Regex

Dans la chaîne "12345", en appliquant ".match(/d{3}/g)" devrait idéalement renvoyer trois correspondances : "123", "234" et "345". Cependant, une seule correspondance ("123") est obtenue.

Raison :

Le drapeau global "g" dans l'expression régulière consomme trois chiffres et avance l'index à la position après le premier match. Cela signifie que lorsque l'expression régulière essaie de faire correspondre la sous-chaîne suivante, l'index est déjà en position 3, ignorant ainsi les correspondances restantes qui se chevauchent.

Solution : assertion de largeur nulle

Une assertion de largeur nulle, en particulier une anticipation positive avec un groupe de capture, peut être utilisée pour faire correspondre toutes les positions dans la chaîne d'entrée. Cette technique consiste à :

  • Tester chaque position à l'aide de l'assertion d'anticipation.
  • Avancer manuellement la propriété RegExp.lastIndex pour éviter une boucle infinie.

Exemple en JavaScript :

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