IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Expression régulière - gestion de plusieurs spans imbriqués en HTML


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Points : 16
    Points
    16
    Par défaut Expression régulière - gestion de plusieurs spans imbriqués en HTML
    Bonjour,

    Je réalise un petit éditeur de texte en javascript dans le même style que fck editor ou que tinyMCE.

    Mais, j'ai un petit souci pour la redéfinition de certaines balises
    par exemple pour le gras et l'italique.
    Sous firefox ce la donne quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <span style="font-weight: bold;"> mot en gras </span>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <span style="font-style: italic;"> mot en italique</span>
    Or sous IE on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <strong>mot en gras</strong>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <em>mot en italique</em>
    Donc dans un souci d'homogénéité je souhaite retransformer les balises span.
    Sous firefox en mode editable, je sais qu'il y a également la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.execCommand("styleWithCSS", null, false);
    qui permet de faire cette conversion mais elle restreint d'autres options que je voudrais utiliser.

    Donc j'ai pensé à une expression régulière du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    html = html.replace(/<span style=\"font-weight: bold;\s*\">(.*?)<\/span>/gi,"<strong>$1</strong>");
    Mais cela fonction uniquement si dans mon html il n'y a qu'une balise "span".

    donc en gros ça marche pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon texte en <span style="font-weight: bold;">gras</span>
    mais pas pour ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon texte<span style="font-weight: bold;"> en gras<span style="font-style: italic;"> qui entoure</span> celui en italique</span>
    En fait ce que je souhaiterai faire, c'est trouver une Regex (ou autre chose) qui permet de localiser les bonnes balises ouvrantes et fermantes pour pouvoir les remplacer.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    dans le (.*?) il faut lui preciser par de <span>.*[^</span>]</span>

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Merci de répondre aussi vite

    il semble que ça me fasse la même chose :

    en gros ma nouvelle expression est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    html = html.replace(/<span style=\"font-weight: bold;\s*\">(.*?(<span>.*[^<\/span>])*)<\/span>/gi,"<strong>$1</strong>");
    En plus, il me semble que l'opérateur n'exclut qu'un seul caractère et non tout une chaîne. Mais, ça m'a donné des idées je continue de chercher.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    entre les crochets c'est une classe d'exclusion

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Hum, disons que cette solution m'a aidé.

    J'ai réussi à pondre ce que je cherchais et ça donne un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    html = html.replace(/<span style=\"font-weight:\s*bold;\s*\">(([^<]*)(<span.*?<\/span>.*?)*)<\/span>/gi, "<strong>$1</strong>");
    Reste maintenant à le tester dans tous les sens avant de pouvoir dire si cela fonctionne correctement et de tagué ce topic en résolu.

    le RegEx finale est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    html = html.replace(/<span style=\"font-weight:\s*bold;\s*\">(.*?(<span.*?<\/span>.*?)*)<\/span>/gi, "<strong>$1</strong>");
    En tout cas, Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Expression régulière : chaine sur plusieurs lignes
    Par djibril dans le forum Langage
    Réponses: 1
    Dernier message: 13/03/2014, 13h00
  2. Expression Régulières pour plusieurs remplacements
    Par olivier1209 dans le forum VBScript
    Réponses: 6
    Dernier message: 09/01/2013, 18h58
  3. Besoin d'aide pour remplacer avec expression régulière sur plusieurs lignes
    Par MediaVistaIntel dans le forum Général Python
    Réponses: 11
    Dernier message: 01/12/2011, 14h19
  4. Réponses: 4
    Dernier message: 04/10/2010, 00h23
  5. expression régulière sur plusieurs lignes
    Par [Hugo] dans le forum Langage
    Réponses: 6
    Dernier message: 01/07/2008, 12h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo