Olivier Miakinen <om+news@miakinen.net> wrote:
Donc tu veux garder tout jusqu'à l'accolade ouvrante, et remplacer tout
le reste par "...}".
exactement, c'est pour un "toString()" sur des objets quelconques...
ça n'a d'intérêt que pour la mise au point...
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)
c'est ce que j'ai pensé le \ était là pour "escaper" le { qui est un
caractère spécial en Regexp.
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 :
ouais exact, j'ai recherché, vainement, ce modifieur.
fonction = fonction.replace(/^([^\{]*)(.|\n)*([^\}]*)$/,
RegExp.$1+'{...}'+RegExp.$3);
Mais il y a plus simple, par exemple :
fonction = fonction.replace(/{(.|\n)*/, '{...}');
oui, merci beaucoup, ça roule super...
--
Une Bévue