[Javascript] Vérifier parentheses via regex

Résolu/Fermé
devMan Messages postés 74 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 16 septembre 2010 - 16 déc. 2009 à 10:15
devMan Messages postés 74 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 16 septembre 2010 - 26 janv. 2010 à 10:56
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.

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
16 déc. 2009 à 10:21
Salut,

Et le langage est ???
0
devMan Messages postés 74 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 16 septembre 2010 15
16 déc. 2009 à 10:28
Salut,
merci de votre reponse,
JavaScript
0
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
devMan Messages postés 74 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 16 septembre 2010 15
16 déc. 2009 à 10:46
Salut,
tu peux me donner en Perl et je vais voir comment je peux le traduit en javascript..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
devMan Messages postés 74 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 16 septembre 2010 15
16 déc. 2009 à 12:43
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
Re,

Tu trouveras les explications ici http://perl.enstimac.fr/DocFr/perlre.html#motifs%20étendus
0
devMan Messages postés 74 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 16 septembre 2010 15
26 janv. 2010 à 10:56
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