Ecrire des RegExp pour recuperer des function

Fermé
Homoculus - 22 déc. 2013 à 17:29
 Utilisateur anonyme - 23 déc. 2013 à 13:33
Bonjour, Merci étant donné que tu donne la peine de lire mon bleme
je me nome Homoculus et je suis en train de faire un entrainement avec les regexp
je veux creer un regexp capable de recuperer une function javascript dans un code voila ce que jais ecrit

$r = preg_replace_callback("#function\s([a-zA-Z0-9_]+)\(([a-zA-Z0-9\s\S]*)\)[\s]*{([a-zA-Z0-9\s\S]*)\}#isU", function($m){
$variable = getVariables($m[2]);

$funct = array("name" => $m[1],
"var" => $variable,
"content" => $m[3]
);
$GLOBALS["function"][$m[1]] = $funct;
return "";
}, $r);

cela me permet de recuprer le nom de la function les parametre de la function et le contenu de la function sauf que bug

quand dans la function il n'ya pas de } cela marche bien
exemple :

function alert(nb)
{
return nb;
}

mais lorsque la function contient des boucles ou des structures de controle alors la cè la galere
exemple

function alert(nb)
{
write "salut les gars";
if(nb == 20)
{
return 20;
}
}
avec ca le regexp se limite a

function alert(nb)
{
write "salut les gars";
if(nb == 20)
{
return 20;
}

a la premiere };

merci d'avance pour votre aide

1 réponse

salut,

à mon avis (je me trompe peu être ^^), il n'y aura pas d'expression régulière qui pourront te satisfaire dans le sens où ce qui délimite ton contenu peu ou non être prit en compte.

à mon avis, il va falloir que tu passe par un traitement préalable, qui va isoler chaque fonction (compter les accolades ouvrantes, soustraire les fermantes et s'arrêter à 0 ... en pensant à ne pas s'arrêter avant la première ^^.

en gros l'idée serai de touver les départs de fonction (ce que tu fais déjà), se positionner au bon endroit (une petite recherche de chaine suffira) puis passer la suite du document dans la fonction qui déterminera la fin de fonction avec les accolades fermantes/ouvrantes.

bon dev.
naga

PS : si je me trompe et qu'il y a en effet une solution avec une seule expression régulière, je prends, j'en aurai graaave besoin ^^
0