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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    dans le (.*?) il faut lui preciser par de <span>.*[^</span>]</span>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    entre les crochets c'est une classe d'exclusion
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    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