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 :

Regex


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 13
    Par défaut Regex
    Bonjour à tous,

    J'aimerais transformer cette phrase "une phrase en gras une phrase en italic" dont le code ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <span style="font-weight: bold;">une phrase en gras</span> <span style="font-style: italic;">une
    phrase en italic</span>
    en ceci: [b ]une phrase en gras[/b ] [i ]une phrase en italic\[/i ]

    pour ce faire, j'utilise cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    function remplace_tag(from,to,text) {
    text=new String(text);
    return text.replace(from,to);
    }
     
    function html_to_code(text) {
    style=remplace_tag(/<(span|font|div) style="(.+)">(.+)</(span|font|div)>/g,'$2',text)
    txt=remplace_tag(/<(span|font|div)>(.+)</(span|font|div)>/g,'$2',text)
     
    if(/font-weight: bold;/g.exec(style)){
     txt="[b ]"+txt+"[/b ]";
    }
    if(/font-style: italic;/g.exec(style)){
     txt="[i ]"+txt+"[/i ]";
    }
    return txt
    }
    Lorsque j'effectue la démarche, le résultat obtenu est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [i ][b ]<span style="font-weight: bold;">une phrase en gras</span> <span style="font-style: italic;">une phrase en italic</span>[/b ][/i ]
    Quelqu'un pourrait me dire où est mon erreur?

    merci



    Edit: simplification de l'erreur.

    cette phrase une phrase en gras une phrase en gras

    avec comme code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <b>une phrase en gras</b> <b>une phrase en gras</b>
    et la fonction de traitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function remplace_tag(from,to,text) {
    text=new String(text);
    return text.replace(from,to);
    }
    
    function html_to_code(text) {
    txt=remplace_tag(/\<b\>(.+)\<\/b\>/g,'$1',text)
    return txt
    }
    donne: [b ]une phrase en gras</b> <b>une phrase en gras[/b ]


    nb: j'ai mis des espaces [b ] pour que l'on puisse voir les balises bbcode

  2. #2
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par défaut
    Pour te simplfier la tache tu devrais peut être utiliser des balises qui donnent visuellement ce que tu recherches, à savoir em et strong.

    Et accesoirement, on déclare une variable avant de l'utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var t = "<strong>Oula</strong><em>Je ne sais guère</em>";
    t = t.replace(/<strong>(.*)<\/strong>/gi,"$1");
    t = t.replace(/<em>(.*)<\/em>/gi,"$1");
    
    alert(t);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 13
    Par défaut
    Le problème reste le même...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var t = "<strong>Oula</strong><em>Je ne sais guere</em><strong>Oula</strong>";
    t = t.replace(/<strong>(.*)<\/strong>/gi,"[b ]$1[/b ]");
    t = t.replace(/<em>(.*)<\/em>/gi,"[em ]$1[/em ]");
     
    alert(t);
    donne comme résultat:

    [b ]Oula</strong>[em ]Je ne sais guere[/em ]<strong>Oula[/b ]

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 13
    Par défaut
    Je tente une nouvelle approche mais j'ai un nouveau souci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    text = remplace_tag(/\<(span|font|div) style=\"([A-Za-z0-9\:\-\.\;\=\"\s]+)\"\>([^<>]+)<\/(span|font|div)\>/ig,'[$2]$3[/$2]',text);
    text = remplace_tag(/\[\/([A-Za-z0-9\:\s\-]+)\;\s([A-Za-z0-9\:\s\-\;]+)\]/ig,'[/$1; /$2]',text);
    text = remplace_tag(/\/font-style: italic;/ig,'[/i ]',text);
    text = remplace_tag(/\/font-weight: bold;/ig,'[/b ]',text);
    text = remplace_tag(/font-weight: bold;/ig,'[b ]',text);
    text = remplace_tag(/font-style: italic;/ig,'[i ]',text);
    text = remplace_tag(/\/text-decoration: underline;/ig,'[/u ]',text) ;
    text = remplace_tag(/text-decoration: underline;/ig,'[u ]',text);
    text = remplace_tag(/\/text-decoration: line-through;/ig,'[/s ]',text) ;
    text = remplace_tag(/text-decoration: line-through;/ig,'[s ]',text);
    text = remplace_tag(/\/text-decoration: underline line-through;/ig,'[/s ][/u ]',text) ;
    text = remplace_tag(/text-decoration: underline line-through;/ig,'[u ][s ]',text);
    text = remplace_tag(/\[\[/ig,'[',text);
    text = remplace_tag(/\]\]/ig,']',text);
    text = remplace_tag(/\]\s\[/ig,'][',text);
    grace à ceci, j'obitiens un formatage en bbcode plus ou moins correct.

    [b ][i ][u ]Une phrase[/b ][/i ][u ] à la place de [b ][i ][u ]Une phrase[u ][/i ][/b ]

    Je sais où est l'erreur (Si toutefois je peux considérer ça comme une erreur), mais j'aimerais inverser les dernières balises du bbcode.

    J'ai tenté avec la fonction arrayObject.reverse() mais sans résultat.

    Quelqu'un pourrait me mettre sur la voie?

    merci

Discussions similaires

  1. [Regex] Plusieurs motifs
    Par sissi_l dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 29/06/2004, 14h15
  2. [jakarta][regex]Matcher mot en entier.
    Par thibaut dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 26/05/2004, 13h33
  3. [Regex] Vérifier qu'une chaîne respecte une expression régulière
    Par PeteMitchell dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 13/05/2004, 14h22
  4. [regex][string] replaceAll bogué ?
    Par 7eme dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 13/11/2003, 16h36
  5. Cherche regex...
    Par laurent_h dans le forum C
    Réponses: 4
    Dernier message: 31/03/2003, 11h24

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