Partage
  • Partager sur Facebook
  • Partager sur Twitter

[regex]parseur pour langage type Zcode

Sujet résolu
    13 avril 2009 à 20:29:59

    Bonjour,
    je suis actuellement en train de réaliser un parseur pour créer un langage type Zcode.
    Ca marche, mais voilà, il se trouve que quand je parse le texte ça prend la première balise ouvrante et la dernière fermante de la variable. Un exemple :
    quand je tape :
    gras:montexte:/gras gras:mon2emetexte:/gras

    Ca m'affiche :
    montexte:/gras gras:mon2emetexte
    Voici la fonction en question :

    function parse(str) {
    str = str.split("<").join("&lt;").split(">").join("&gt;");
    	var regex =
    	 new Array(
    		'  ',
    		'\\n',
    		'titre([0-9]):(.+):/titre',
    		'gras:(.+):/gras',
    		'italique:(.+):/italique',
    		'image:(.+):/image',
    		'lien:(.+),(.+):/lien',
    		'citation:(.+),(.+):/citation',
    		'ttpetit:(.+):/ttpetit',
    		'tpetit:(.+):/tpetit',
    		'petit:(.+):/petit',
    		'gros:(.+):/gros',
    		'tgros:(.+):/tgros',
    		'ttgros:(.+):/ttgros',
    		'code:(.+):/code'
    		);
    		
    	var replacement = 
    	new Array(
    		'&nbsp;&nbsp;',
    		'<br \/>',
    		'<h$1>$2</h$1>',
    		'<strong>$1</strong>',
    		'<em>$1</em>',
    		'<img src="$1"/>',
    		'<a href="$1">$2</a>',
    		'<br /><span class="citation">Citation : $1</a><div class="citation2">$2</div>',
    		'<span class="ttpetit">$1</span>',
    		'<span class="tpetit">$1</span>',
    		'<span class="petit">$1</span>',
    		'<span class="gros">$1</span>',
    		'<span class="tgros">$1</span>',
    		'<span class="ttgros">$1</span>',
    		'<div class="code">$1</div>'
    		);
    		
    		
    	for (i = 0; i < regex.length; i++) {
    	     str = str.replace( new RegExp(regex[i], "g"), replacement[i]);
    	}
    
    return str;
    }
    


    Merci d'avance pour votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      13 avril 2009 à 22:47:45

      Il faut utiliser l'option U (ungreedy) des régex, hors en JS elle n'existe pas. Cherche dans le forum javascript cette semaine le sujet a été abordé deux fois donc tu devrais vite trouver une réponse :)
      • Partager sur Facebook
      • Partager sur Twitter
        14 avril 2009 à 4:18:31

        Merci beaucoup cerium50, effectivement, il y a plusieurs sujets qui en parlent...
        Pour ceux qui auront la flemme de chercher, je vais faire un petit récapitulatif :

        En fait, il s'agit "d'imiter" l'option U (Ungreedy) qui n'existe pas en javascript (comme dis ci-dessus) en metant un point d'interogation à la fin de la parenthèse :

        gras:(.+):/gras => gras:(.+?):/gras
        italique:(.+):/italique => italique:(.+?):/italique
        etc...

        On test :
        gras:montexte:/gras gras:mon2emetexte:/gras


        On obtient :
        montexte mon2emetexte

        Ça marche !

        Encore merci à toi cerium50.
        • Partager sur Facebook
        • Partager sur Twitter

        [regex]parseur pour langage type Zcode

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown