258 votes

Le nom des groupes de capture en JavaScript regex ?

Autant que je sache il n’y a aucune telle chose comme les groupes de captures nommées en JavaScript. Ce qui est l’autre moyen pour obtenir une fonctionnalité similaire ?

189voto

Tim Pietzcker Points 146308

Généralement, vous pouvez tout faire avec la normale (numérotés) de capturer les groupes que vous pouvez faire avec nommée capturer les groupes, vous avez juste besoin de garder une trace des numéros.

Il y a seulement deux "structurelle" avantages de l'nommé capturer les groupes que je pense:

  1. Dans certains regex saveurs.NET et JGSoft, autant que je sache), vous pouvez utiliser le même nom pour les différents groupes de votre regex (voir ici pour un exemple où cette matière). Mais la plupart des regex saveurs ne prennent pas en charge cette fonctionnalité de toute façon.

  2. Si vous avez besoin de se référer à numérotées de capturer les groupes dans une situation où ils sont entourés par des chiffres, vous pouvez obtenir un problème. Disons que vous voulez ajouter un zéro à un chiffre et donc vouloir remplacer (\d) avec $10. En JavaScript, cela fonctionne (tant que vous avez moins de 10 capture d'un groupe dans votre regex), mais Perl vont penser que vous êtes à la recherche pour la référence arrière nombre 10 au lieu de nombre 1, suivie par un 0. En Perl, vous pouvez utiliser ${1}0 dans ce cas.

Autres que que, ainsi nommé de capturer les groupes sont juste "sucre syntaxique". Il permet d'utiliser la capture de groupes uniquement lorsque vous en avez vraiment besoin et l'utilisation de non-capture de groupes d' (?:...) dans tous les autres cas.

Le problème avec le JavaScript, c'est qu'il ne prend pas en charge verbose regexes qui ferait de la création d'lisible, complexe expressions régulières beaucoup plus facile.

63voto

Yunga Palatino Points 341

Vous pouvez utiliser XRegExp, (à partir de la page web:) augmentée, extensible, multi-navigateur et la mise en œuvre d'expressions régulières, y compris le soutien pour la syntaxe supplémentaire, les drapeaux et les méthodes:

  • Ajoute de nouvelles regex et le texte de remplacement de la syntaxe, y compris la prise en charge globale de nommée à la capture.
  • Ajoute deux nouveaux regex drapeaux: s, de faire dot correspondre à tous les personnages (aka dotall ou singleline mode), et x, gratuit pour les-de l'espacement et de commentaires (aka le mode étendu).
  • Fournit une suite de fonctions et de méthodes qui rendent complexes les regex traitement d'une brise.
  • Automatiquement les correctifs les plus couramment rencontrées croix-navigateur incohérences dans les regex comportement et la syntaxe.
  • Vous permet de facilement créer et utiliser des plugins qui ajoutent une nouvelle syntaxe et des drapeaux XRegExp du langage d'expressions régulières.

Voir http://xregexp.com/ et http://xregexp.com/syntax/#namedCapture

6voto

Yashima Points 1163

D’attribution de noms de groupes capturés fournissent une chose : moins de confusion avec des expressions régulières complexes.

Cela dépend vraiment de votre cas d’utilisation mais peut-être impression votre expression régulière pourrait aider.

Ou vous pouvez essayer et de définir des constantes pour désigner vos groupes capturés.

Commentaires pourraient alors également aider à montrer aux autres qui lisent votre code, ce que vous avez fait.

Pour le reste je suis d’accord avec la réponse de Tims.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X