[Javascript] Vérifier parentheses via regex

Résolu
devMan Messages postés 75 Statut Membre -  
devMan Messages postés 75 Statut Membre -
Bonjour,

j'ai une zone de text dans laquel l'utilisateur peut saisi quelque chose comme ça:
(1 and 2) or 3 ou bien (1 and (2 and 3) or 4)....

je veux une reg exp pour vérifier pour chaque parenthèse ouverte j'ai une parenthèse fermée.
Configuration: Linux
Firefox 3.5.5

8 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Et le langage est ???
    0
  2. devMan Messages postés 75 Statut Membre 15
     
    Salut,
    merci de votre reponse,
    JavaScript
    0
  3. lami20j
     
    Salut,

    Je pense qu'il faudra utiliser des motifs recursifs.
    Je ne connais pas l'implementation en JavaScript.

    En revanche je pourrai te donner en Perl.
    0
  4. devMan Messages postés 75 Statut Membre 15
     
    Salut,
    tu peux me donner en Perl et je vais voir comment je peux le traduit en javascript..
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j
     
    Re,

    je veux une reg exp pour vérifier pour chaque parenthèse ouverte j'ai une parenthèse fermée.
    En ce cas il suffit de compter les paranthèses ouvrantes/fermantes.

    En fait ce n'est pas vraiment ça que tu veux, puisqu'il faut aussi le bon emplacement sinon il pourra saisir ça et ça passera

    (1 and )2 or 3 ou bien (1( and 2 and 3) or 4)....

    Quelque chose comme ça, mais il faut peaufiner je pense

    #!/usr/bin/perl
    
    $str="(1 and (2 and 3) or 4)";
    $str=~/(\((?:(?>[^()]+)|(?1))*\))/;
    ($str eq $1)?print "$1 ok\n":print "ne corresponds pas\n";
    # manque une paranthese
    $str="(1 and (2 and 3 or 4)";
    $str=~/(\((?:(?>[^()]+)|(?1))*\))/;
    ($s eq $1)?print "$1 ok\n":print "ne corresponds pas\n";
    __END__
    0
    1. lami20j
       
      Re,

      Correction

      #!/usr/bin/perl
      
      $str="(1 and (2 and 3) or 4)";
      $str=~/(\((?:(?>[^()]+)|(?1))*\))/;
      ($str eq $1)?print "$1 ok\n":print "ne corresponds pas\n";
      # manque une paranthese
      $str="(1 and (2 and 3 or 4)";
      $str=~/(\((?:(?>[^()]+)|(?1))*\))/;
      ($str eq $1)?print "$1 ok\n":print "ne corresponds pas\n";
      __END__
      0
  7. devMan Messages postés 75 Statut Membre 15
     
    Salut,
    merci de votre reponse,
    tu peux me donner des explications sur ce que tu as fait stp ?
    $str=~/(\((?:(?>[^()]+)|(?1))*\))/;
    

    ?: , ?> , ?1 ..................
    Pour être en mesure de convertir ce regexp à javaScript
    0
  8. devMan Messages postés 75 Statut Membre 15
     
    Re,
    merci de votre reponse,
    il me semble ça va pas marcher avec les regexp javascript...
    car je pense que les lookbehind : (?<=X) positive lookbehind et (?<!X) negative lookbehind .
    n'existe pas en javascript..
    par contre je peux faire ça :
    var incr = 0; 
    var parentheseOk = false; 
    for(var i =0 ; i < maChaine.length; i++){ 
         if(maChaine[i] == '('){ 
             incr++; 
         } 
         if(maChaine[i] == ')'){ 
            incr--; 
            if (incr < 0) { 
                break;
            } 
         }
    }
    alert(incr);
    parentheseOk = (incr == 0) ;
    alert(parentheseOk);
    


    merci et bon dev
    0