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 :

RegExp très très avancé


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 54
    Par défaut RegExp très très avancé
    Bonjour à tous.
    Je souhaiterai développer un petit script javascript, qui ligne par ligne du code javascript.
    Pour ça, l'utilisateur rendre du code javascript, et mon programme doit juste afficher un alert contenant chaque instruction.

    Première étape sur là quel je bloque, il faudrait que je puisse détecter chaque instruction et ensuite effectuer un traitement spécifique pour chaque instruction.
    J'ai décidé d'utiliser l'objet RegExp pour séparer le code de l'utilisateur en plusieurs micro instructions.
    Seulement le problème c'est que le langage javascript est très compliqué à analyser.
    Je pense que pour mieux comprendre mon problème le mieux serait que je vous donne un exemple.
    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
    37
    38
    39
    40
    41
     
    /*
      Cette fonction sert à enlever le prototype de la fonction passer en parametre.
      ex : function a(){
        var x = 'test' ;
        ...
        ...
        ...
        alert(x) ;
      }
      deviendra : 
        var x ='test' ;
        ...
        ...
        ...
        alert(x) ;
    */
    function getOnlySourceCodeOfFunction(completeFunction){
      var expression = new RegExp("^function +.+\\({1,1}.*\\){1,1}\\s*\\{{1,1}([\\s\\S]*)}$","g") ;
      return (expression.exec(completeFunction)[1]) ;
    }
     
     
     
    function getArrayOfMicroInstruction(sourceCode){
      /*
      Ancienne méthode qui marche mais ne recupere pas les doubles voir triple instruction
      var expression = new RegExp("[^\\s;]([^\\n;]*)[^\\s]","g") ;
      ex : var c = 'toto '+ \n 'titi' ;\n est une double instruction
      L'ancienne méthode capturait sa comme 2 instructions bien distincte.
      Autre probleme elle ne detecte pas les }
      */
      var arrayOfMicroInstruction = new Array() ;
      var expression = new RegExp("[^\\s;]([^\\n;]+)[^\\s]","g") ;
      while(expression.test(sourceCode)){
        var microInstruction = RegExp.lastMatch ;
        arrayOfMicroInstruction.push(microInstruction) ;
      } 
     
      return arrayOfMicroInstruction ; 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var sourceCode = getOnlySourceCodeOfFunction(a) ;
      var bidon = getArrayOfMicroInstruction(sourceCode) ;
      for(var i = 0 ; i < bidon.length ; i++){
       alert(bidon[i]) ;
      }
    Explication du code :
    sourceCode contient le code source et uniquement le code source de la fonction a.
    En effet sourceCode ne contient pas le prototype de la fonction.
    Ensuite j'entre dans bidon un tableau de micro instructions.
    Et je les affiches une par une.

    Pourquoi sa ne marche pas :
    Il semblerai que mon expression régulière qui détermine comment détecter une instruction ne soit pas correcte. Elle ne détecte pas les "}" et les doubles instructions.
    Ex :
    alert('Coucou' +
    'TATA') ;
    est une double instructions. puisqu'elle est sur deux lignes.

    Petite présition :

    Une fin d'instruction en javascript se termine soit par un ';' soit par un '\n'

    Pour finir :
    Je sais que se problème est très difficile, mais pourriez vous m'aider à le résoudre. Il n'y a qu'une seul ligne à modifié sur mon code source

    Merci d'avance.
    Cordialement Freezerhm

  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
    très très avancé ^^

    heu pas besoin de regExp pour ça ^^

    quand tu dis instruction ..
    poru toi ,le delimiteur c'est ; ou le retour ligne ?
    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 confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 54
    Par défaut
    C'est bien ça, une instruction peut soit être délimiter par un ; soit par un \n

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function ab(){
        var x = 'test' ;
        alert(x) ;
      }
     
    var instructions=ab.toString().split(/(;\s*)|(\s*\r\n)|(\s*;\r\n)/)
    tl=instructions.length
    instructions=instructions.slice(1,tl-1)
    alert (instructions.join('\n') )
    ou
    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
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <script type="text/javascript">
    function ab(){
        var x = 'test' ;
        alert(x) ;
      }
     
    function init(){
    var instructions=ab.toString().split(/(;\s*)|(\s*\r\n)|(\s*;\r\n)/)
    tl=instructions.length
     
    instructions=instructions.slice(1,tl-1)
    var code=""
    var i=-1;
    while(instructions[++i]){
      code+="<pre>"+instructions[i]+";</pre>";
      }
    document.getElementById('res').innerHTML=code  
    }
    </script>
    <title>Nouvelle page 1</title>
    </head>
     
    <body>
    <input type="button" onclick="init()" value="test" />
    <div id='res'></div>
     
    </body>
     
    </html>
    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
    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
    ou encore:
    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
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <script type="text/javascript">
    function ab(){
        var x = 'test' ;
        alert(x) ;
      }
     
     
     
    function init(){
    reg=/^([^;{}]+)(;|[^{}])$/gm;
    instructions=ab.toString().match(reg)
    var code=""
    var i=-1;
    while(instructions[++i]){
      code+="<pre>"+instructions[i]+"</pre>";
      }
    document.getElementById('res').innerHTML=code  
    }
     
    </script>
    <title>Nouvelle page 1</title>
    </head>
     
    <body>
    <input type="button" onclick="init()" value="test" />
    <div id='res'></div>
     
    </body>
     
    </html>
    après ça depend de la complexite de la fonction ab
    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 !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 54
    Par défaut
    A super merci, c'est gentil. Par contre il ne detecte pas les boucles
    Je continu à chercher de mon coter merci

  7. #7
    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
    le premier code (split+slice) a mon avis plus sur ...
    il s'affranchit des boucles et conditions ...
    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 !

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

Discussions similaires

  1. BDD sur réseau très très très lent...
    Par ericain dans le forum Access
    Réponses: 12
    Dernier message: 20/02/2015, 17h17
  2. newSchema(url) exécution très très très lente
    Par schum-hacker dans le forum Général Java
    Réponses: 6
    Dernier message: 21/01/2013, 09h32
  3. Logiciel intranet très très très lent
    Par openeyes dans le forum ALM
    Réponses: 7
    Dernier message: 15/02/2011, 15h16
  4. Améliorer les performances - très (très) (très) grands datasets
    Par debdev dans le forum Administration et Installation
    Réponses: 6
    Dernier message: 08/01/2010, 16h46
  5. Démarrage trés, trés, trés difficile
    Par Cazaux-Moutou-Philippe dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 29/06/2008, 10h45

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