3 votes

Comment spécifier des groupes non capturants pour ma regex afin d'autoriser les balises avec des tirets ?

Bien Je voudrais faire un petit changement d'un matcheur regex dans le noyau de jQuery afin d'accomplir mon but : Autoriser la correspondance des tags avec un tiret dans le nom

Exemple : <auto-link/> , <user-circle/> , <something-else></something-else>

Aujourd'hui, le tag matcher/regex de jQuery est déclaré comme suit rsingleTag variable, vous pouvez voir ici sur leur code source, mais il ne correspond pas à ce dont j'ai besoin. J'ai donc apporté ma modification :

  • Regex par défaut : /^<(\w+)\s*\/?>(?:<\/\1>|)$/
  • Regex modifié avec des tirets : /^<(\w(\w|-\w)*\s*\/?)>(?:<\/\1>|)$/

Les modifications que j'ai apportées correspondent parfaitement, mais lorsque j'essaie d'en extraire des chaînes de caractères en utilisant rsingleTag.exec("<auto-link/>") le résultat attendu n'est pas similaire à la regex par défaut de jQuery.

  • Regex par défaut : rsingleTag.exec("<div/>") => ["<div/>", "div"]
  • Regex modifié avec des tirets : rsingleTag.exec("<div/>") => ["<div/>", "div/", "v"]

J'aimerais que le résultat de la regex modifiée soit le même que celui de la regex par défaut, en plus d'autoriser les balises avec des tirets. Qu'est-ce que je fais de mal ou comment puis-je le corriger ?

3voto

Tomalak Points 150423
/^<(\w(\w|-\w)*\s*\/?)>(?:<\/\1>|)$/   - your attempt
/^<(\w[-\w]*)\s*\/?>(?:<\/\1>|)$/      - your intention

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