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 :

erreur dans l'expression régulière ?


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 421
    Par défaut erreur dans l'expression régulière ?
    Salut,

    je fais un petit script pour convertir du bbcode en html, mais le résultat n'est pas tout à fait celui attendu.
    Un soucis d'expression régulière ? ou dans l'utilisation des variables ?

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Untitled Page</title>
    </head>
    <body>
     
        <script language="javascript">
     
            function tolabel(pControl) {
                document.getElementById("monlabel").innerHTML = txtBBCode2HTML(pControl.value);
            }
     
            function txtBBCode2HTML(texte) {
                // variables locales
                var regex;
     
                // [ b]texte gras[\b]
                regex = new RegExp("[ b](.+?)[ /b]"); //, "gi");
                texte = texte.replace(regex, "< strong>$1</strong>");
                alert(texte);
     
    //            // [ i]texte italique[\i]
    //            regex = new RegExp("\[i\](.+?)\[\/i\]", "gi");
    //            texte = texte.replace(regex, "< em>$1</em>");
     
                return texte;
            }</script>
     
        <textarea onfocusout="tolabel(this);"> [ b]gras[/b] [ i]italique[/i] [ u]souligné[/u] </textarea>
        <br />
        <label id="monlabel" name="monlabel">
            résultat
        </label>
    </body>
    </html>
    Si je passe ça en entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ b]gras[/b] [ i]italique[/i] [ u]souligné[/u]
    Ca me donne ça en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [< strong>]gras[</strong>b] [ i]italique[/i] [ u]souligné[/u]

    alors que je voudrais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    < strong>gras</strong> [ i]italique[/i] [ u]souligné[/u]
    Une idée ?

    NB : j'ai dû rajouter des espace dans les balises pour pouvoir écrire ce post sans qu'ils soient interprétés, ils ne sont bien évidemment pas présent dans le code

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Par défaut
    Pourrais tu passer ton code en pièce jointe ?

  3. #3
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Salut,

    Cette expression /\[b\](.+)\[\/b\]/fonctionne avec les paramètres ig, tester ici.
    Attention il faut échapper les slash (ou anti-slash, je sais jamais) si tu utilises l'objet RegExp et non la forme littérale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var rgx = new RegExp("\\[b\\](.+)\\[\\/b\\]", "ig");
    Pourquoi un espace dans la balise ouvrante?

  4. #4
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Ceci fonctionne:
    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
    19
    20
    21
    22
    23
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Untitled Page</title>
    </head>
    <body>
      <textarea onblur="tolabel(this);">gras</textarea>
      <br />
      <label id="monlabel" name="monlabel">résultat</label>
      <script language="javascript">
      function tolabel(pControl) {
        document.getElementById("monlabel").innerHTML = txtBBCode2HTML(pControl.value);
      }
      function txtBBCode2HTML(texte) {
        var regex = new RegExp("\\[b\\](.+)\\[\\/b\\]", "ig");
        //var regex = /\[b\](.+)\[\/b\]/ig;
        texte = texte.replace(regex, "<strong>$1</strong>");
        alert(texte);
        return texte;
      }
      </script>
    </body>
    </html>
    onfocusout n'existe pas.

Discussions similaires

  1. Une date butoire dans une expression régulière
    Par zooffy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 14/02/2008, 10h11
  2. Réponses: 5
    Dernier message: 31/08/2006, 13h34
  3. Parenthèses dans une expression régulière
    Par papyreno dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 10/05/2006, 16h28
  4. [EXP] Evaluation dans une expression régulière
    Par SergentHeinz dans le forum Langage
    Réponses: 7
    Dernier message: 10/11/2005, 18h17
  5. Réponses: 6
    Dernier message: 17/08/2005, 12h38

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