Le 19/04/2008 20:41, Une Bévue a écrit :
le but de la manip:
convertir :
function Machin(){
...
corps de la onction
...
}
en :
function Machin(){...} //là les "..." remplacent ce qu'il y avait dans
le corps de la fonction.
Donc tu veux garder tout jusqu'à l'accolade ouvrante, et remplacer tout
le reste par "...}".
j'ai essayé des trucs comme :
var fonction=setToRed.toString();// "setRed" est une function
fonction=fonction.replace(/^([^\{]*).*([^\}]*)$/,
RegExp.$1+'{...}'+RegExp.$2);
Voyons voir.
^ = ancré au début
([^\{]*) = un nombre quelconque de fois ce qui n'est pas un \ ou un {
(ou peut-être seulement un { mais j'ai la flemme d'aller vérifier)
..* = un nombre quelconque de fois ce qui n'est pas un saut de ligne
([^\}]*) = un nombre quelconque de fois ce qui n'est pas un \ ou un }
(même remarque)
$ = ancré à la fin
mais ça me donne l'entiéreté de la fonction, avec son corps...
Oui, parce que le premier saut de ligne se trouvait juste après la
première accolade, donc le .* était vide. Note que dans le cas contraire
c'est RegExp.$2 qui aurait été vide.
Le problème c'est que l'option s qui autorise le caractère . à remplacer
un saut de ligne n'existe pas dans JavaScript (c'est dans PCRE). Ceci
devrait fonctionner :
fonction = fonction.replace(/^([^\{]*)(.|\n)*([^\}]*)$/,
RegExp.$1+'{...}'+RegExp.$3);
Mais il y a plus simple, par exemple :
fonction = fonction.replace(/{(.|\n)*/, '{...}');