11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'ai créé un script permettant de rajouter un span.letter sur les lettres majuscules du contenu d'un titre ou d'un élément html comportant la classe .addletter :
/(<([^>]+)>|[A-Z«»"]|&amp;)/gm

Cette partie du code permet de filtrer efficacement les liens :
<([^>]+)>

Malgré cela mon script entre en conflit avec des spans enfants de l'élément traités en ajoutant des classes .letter à des endroits non désirés...

Voici une page en ligne sur laquelle vous trouverez le code complet.
Modérateur
Aïe, je crois que j'me suis cassé une dent dessus... Smiley kc
/(?!\>[\w\d\s]*)([A-Z])(?=[\w\d\s]*\<)/gm


Pour détailler un peu :
(?!\>[\w\d\s]*) // Ça doit commencer par un chevron fermant + du texte et/ou des espace s'il y en a
([A-Z]) // C'est une Majuscule qu'on veut !
(?=[\w\d\s]*\<) // Ça doit finir par du texte et des espaces s'il y en a suivi d'un chevron ouvrant


C'est peut être pas optimal, mais ça a l'air de faire son job (vérifié avec regexr et sur un fiddle avec ton code).
http://www.regexr.com/3avqe

C'est prenant les regex ! Smiley err
Alors là chapeau bas _laurent !

J'ai enlevé les antislashs devant les chevrons car ils ne passaient pas le contrôle de mon jshint, j'ai enlevé la vérification du dernier chevron car les titres sans ancres n'étaient pas parsés, j'ai aussi ajouté l'esperluette et les guillemets français (je n'en avais effectivement pas parlé dans mon post original). Le parsage des guillemets droits n'est pas prévu car problématique sur les liens. Ce qui me donne au final :
/(?!>[\w\d\s]*)([A-Z]|&amp;)/gm

Merci pour tout (et aussi pour la découverte du site RegExr).

EDIT : ce code ne fonctionnait pas dans tous les cas de figure (notamment s'il n'y avait pas de balises html pour fermer la chaîne). La solution finale :
/([A-Z])(?![^<>]*>)/gm

Sujet résolu.
Modifié par Olivier C (26 Jun 2015 - 09:47)