|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Lycéen Inscription : mars 2009 Messages : 201 ![]() |
Bonsoir,
je cherche a isoler certaine partie d'une chaine de caractère avec match, les éléments serait pris à partir du caractère ":" et finirai soit par un "." soit par ")". Voila mon code actuel mais il ne marche pas, je ne trouve pas pourquoi Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Essaye ça, si j'ai pas compris de travers ce que tu veux obtenir.
Selon moi il y a 3 difficultés avec les regexp : 1- maîtriser la syntaxe 2- savoir exactement ce qui doit correspondre 3- savoir exactement ce qui ne doit pas correspondre Tu as mis un (.)* à la place d'un (.*), ce qui me laisse penser que tu te heurtes à ma diffculté n°1 Je t'ai mis un + au lieu d'une *, car je pense que trouver une chaîne vide ne t'intéresse pas. De plus, j'ai remplacé le point par une classe [^.)] qui signifie « tout sauf point et parenthèse droite ». Après ça on a un groupe non capturant : (?: … ). C'est comme un groupe parenthésé normal sauf que le résultat n'est pas conservé. Ça améliore les performances. Et pourquoi un groupe à cet endroit ? C'est pour le pipe « | » : si on n'en met pas, il coupe toute la regexp en deux (pour voir, compare /ab|c/ et /a(?:b|c)/). Au fait, juste par curiosité : pourquoi tu as besoin de ça ?
__________________
Disposition de clavier ergonomique française : Bépo |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Lycéen Inscription : mars 2009 Messages : 201 ![]() |
Merci de répondre, mon opinion sur tes compétence sont maintenant confirmé ^^
bref, je construis un framework, travaillant sur le moteur de sélection des éléments de la page pour le moment, je souhaite que l'utilisateur puisse le modelé un maximum, c'est a dire, ajouté s'il le désire un moyen de sélection similaire a ce qu'il existe actuellement telle les pseudos classe par exemple, appelons les les sélecteurs, mais pour ce que je t'ai demandé c'est une fonction a part dont je te parlerais plus tard si tu le désires ) la fonction désigné est apellé, par exemple, ici, la fonction nommé "[" serait appellé lorsque le caractere "[" serait verifier. ![]() jusque la tout vas bien ? Que pensse tu de ce moyen de parcourt ? j'ai deja essayé avec des regExp mais c'etait une vrai usine a gaz
|
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Lycéen Inscription : mars 2009 Messages : 201 ![]() |
awi et le code que tu m'a donné ne marche pas :/
|
|
|
00
|
|
|
#5 | |||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Citation:
En fait je faisais mes tests avec la méthode exec des regexp, en oubliant que String.match et RegExp.exec ne se comportent pas tout à fait pareil… Code console :
exec renvoie un tableau. En 0, on a la correspondance totale, et en 1, 2, etc., les différents groupes capturés. Les regexp avec l'option g ont une propriété lastIndex qui évolue à chaque nouvelle recherche, un peu comme les mysql_fetch en PHP. En gros faut faire une boucle while (tab = rx.exec(carac)) et travailler avec tab dans cette boucle. Récupère tab[1], c'est le groupe capturé qui nous intéresse. Et tu as vu, il reste une parenthèse gauche qui traîne, j'ai suivi à la lettre les « spécifications » de ton premier post J'en pense que ça ressemble furieusement à un automate d'analyse lexicale
__________________
Disposition de clavier ergonomique française : Bépo |
|||
|
|
00
|
|
|
#6 | ||
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 018 ![]() |
en conservant le match:
Code :
c'est pas le resultat recherché ?
__________________
Ma page 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 ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
||
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() danseur Inscription : août 2003 Messages : 2 667 ![]() |
d'accord SF, j'aurais dit pareil (sauf info en plus)
__________________
On ne mord pas, on manifeste seulement notre tristesse face à des exposés de situations qui défient notre entendement binaire. |
|
|
00
|
|
|
#8 |
|
Membre régulier
![]() Lycéen Inscription : mars 2009 Messages : 201 ![]() |
D'accord merci, mais qu'appelle tu vraiment "compilation" ? En javascript ?
Merci space Frog cela convient parfaitement |
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Lycéen Inscription : mars 2009 Messages : 201 ![]() |
Bonjour, me voila avec un nouveau problème que j'aurai du prévoir
Code js :
var string = "text.text:text(text:text(text.text).text:text(text:text().text:text(text.text.text:text(n fois possible)))).text:text()" Imaginons que ma chaine de caractère soit celle ci-dessus, comment récupérer par une RegExp (pour gagner du temps) juste ce qu'il y a dans les premières parenthèse, c'est a dire qu'il faudrait obtenir le tableaux suivant: ["text.text:text(text:text(text.text).text:text(text:text().text:text(text.text.text:text(n fois possible))))", ":text()"] "text" pouvant être n'importe quelle caractère sauf ceux nécessaire au bon fonctionnement de la regexp. L'utilisateur pouvant mettre un nombre de fois indéterminé de "text" dans les parenthèse d'autre "text". J'ai déjà essayé par diverses regexp mais cela ne me semble pas réalisable... Merci d'avance |
|
|
00
|
|
|
#10 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 018 ![]() |
Pour matcher avec une regexp, il faut un pattern ...
en l'occurrence je vois mal comment définir un pattern dans ton cas de figure ...
__________________
Ma page 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 ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#11 |
|
Membre régulier
![]() Lycéen Inscription : mars 2009 Messages : 201 ![]() |
Okay merci pour votre aide !
|
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Il n'y a pas de compilation en JavaScript (sauf les JIT mais ils sont d'une complexité inhumaine ^^). Je parlais du domaine de la compilation en général, ça peut aller du langage dédié tout simple, comme un langage d'opérations arithmétiques avec juste des nombres à un chiffre, des + et des -, jusqu'aux méta-langages, c'est-à-dire des langages permettant de définir des langages
![]() Sinon pour ton exemple, il te faudrait un pattern récursif. Ça n'existe qu'en Perl, et heureusement ! Ils sont cauchemardesques 1- je repère les parenthèses dans lesquelles il n'y a pas d'autres parenthèses (plutôt facile, /\([^()]*\)/) 2- s'il n'y en a pas, alors il n'y a rien à traiter 3- sinon, je traite le résultat 4- je retire ces parenthèses de la chaîne totale, j'ai donc « retiré un niveau » de parenthèses 5- je recommence avec cette nouvelle chaîne. Tout ça repose sur une fonction qui s'auto-appelle : Code :
Bon j'ai dit que l'idée était assez simple, en fait il faut être méthodique car on s'emmêle très facilement les pinceaux ![]() Je vais te laisser chercher un peu
__________________
Disposition de clavier ergonomique française : Bépo |
||
|
|
00
|
|
|
#13 |
|
Membre régulier
![]() Lycéen Inscription : mars 2009 Messages : 201 ![]() |
Helo ! Merci de ton investissement
Bonne idée mais ton parseur ne résoudrais rien :/ Ce qu'il faudrait c'est une fonction qui récupère ce qu'il y a entre parenthèse mais juste une fois, c'est a dire par exemple pour ma string d'avant: Code :
var string = "text.text:text(text:text(text.text).text:text(text:text().text:text(text.text.text:text(n fois possible)))).text:text()" Code :
retour1= [":text(text:text(text.text).text:text(text:text().text:text(text.text.text:text(n fois possible))))", ":text()"] Code :
retour2 = [":text(text.text)", ":text(text:text().text:text(text.text.text:text(n fois possible)))"]; Troisième appelle de la fonction sur retour2: Code :
retour3 = [":text()", ":text(text.text.text:text(n fois possible))"]; Quatrième appelle de la fonction sur retour3: Tu vois ? mais comme tu l'a dis les regExp sont inutilisable dans ce cas |
|
|
00
|
|
|
#14 | ||
|
Membre régulier
![]() Lycéen Inscription : mars 2009 Messages : 201 ![]() |
voila une fonction que j'ai créer, rien de sorcier mais qui repond a ce que je disais, il me semble qu'il est optimisé:
Code :
|
||
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Je croyais avoir capté ce que tu voulais faire, mais là… Je suis complètement à côté de la plaque
![]() J'aimerais bien avoir un exemple plus clair avec des pommes et des bananes
__________________
Disposition de clavier ergonomique française : Bépo |
|
|
00
|
|
|
#16 | |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 018 ![]() |
Citation:
__________________
Ma page 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 ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
|
00
|
|
|
#17 |
|
Membre régulier
![]() Lycéen Inscription : mars 2009 Messages : 201 ![]() |
Avec des poemmes et des bananes
ok ![]() var string = "pomme.pomme:banane(pomme.pomme.pomme:banane(x fois)).pomme.pomme:banane()"; c bon la ?
|
|
|
00
|
|
|
#18 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 018 ![]() |
t'as oublié les noix
signé Furax
__________________
Ma page 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 ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#19 |
![]() ![]() Andry Aimé Inscription : septembre 2007 Messages : 5 128 ![]() |
Ne peut-on pas générer un String à l'aide d'un boucle et faire un eval pour le pattern?
|
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Tu suggères un eval ? Qui es-tu ? Qu'as-tu fait du vrai Andry ?
… Plus sérieusement, je veux bien voir ce que tu proposes. @The-destroyer : en fait je sèche, j'ai pas de meilleure solution à proposer que ton algo avec pOpen. C'est un truc que j'avais vu en cours d'ailleurs, ça me revient maintenant : on devait faire un pretty-printer, ctà-dire un programme qui indente automatiquement un code source (en gros). @Spaffy : bien vu, mais c'est pas des pommes, c'est des figues xD
__________________
Disposition de clavier ergonomique française : Bépo |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com