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.
j'ai essayé des trucs comme :
var fonction=setToRed.toString();// "setRed" est une function
fonction=fonction.replace(/^([^{]*).*([^}]*)$/,
RegExp.$1+'{...}'+RegExp.$2);
mais ça me donne l'entiéreté de la fonction, avec son corps...
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.
j'ai essayé des trucs comme :
var fonction=setToRed.toString();// "setRed" est une function
fonction=fonction.replace(/^([^{]*).*([^}]*)$/,
RegExp.$1+'{...}'+RegExp.$2);
mais ça me donne l'entiéreté de la fonction, avec son corps...
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.
j'ai essayé des trucs comme :
var fonction=setToRed.toString();// "setRed" est une function
fonction=fonction.replace(/^([^{]*).*([^}]*)$/,
RegExp.$1+'{...}'+RegExp.$2);
mais ça me donne l'entiéreté de la fonction, avec son corps...
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)
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)*/, '{...}');
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)
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)*/, '{...}');
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)
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)*/, '{...}');
oui, merci beaucoup, ça roule super...
oui, merci beaucoup, ça roule super...
oui, merci beaucoup, ça roule super...
Une Bévue wrote:
oui, merci beaucoup, ça roule super...
Euh, un "petit bémol" :
ma function est exactement écrite comme ça :
function setToRed(element){
element.style.backgroundColor='red';
}
avec fonction = fonction.replace(/{(.|n)*/, '{...}');, ça me retourne :
function setToRed(element)
{...}
j'ai essayé en escapant ({) :
fonction = fonction.replace(/{(.|n)*/, '{...}');
ça donne exactement le même résultat curieux pour moi...
Une Bévue <unbewusst.sein@weltanschauung.com.invalid> wrote:
oui, merci beaucoup, ça roule super...
Euh, un "petit bémol" :
ma function est exactement écrite comme ça :
function setToRed(element){
element.style.backgroundColor='red';
}
avec fonction = fonction.replace(/{(.|n)*/, '{...}');, ça me retourne :
function setToRed(element)
{...}
j'ai essayé en escapant ({) :
fonction = fonction.replace(/{(.|n)*/, '{...}');
ça donne exactement le même résultat curieux pour moi...
Une Bévue wrote:
oui, merci beaucoup, ça roule super...
Euh, un "petit bémol" :
ma function est exactement écrite comme ça :
function setToRed(element){
element.style.backgroundColor='red';
}
avec fonction = fonction.replace(/{(.|n)*/, '{...}');, ça me retourne :
function setToRed(element)
{...}
j'ai essayé en escapant ({) :
fonction = fonction.replace(/{(.|n)*/, '{...}');
ça donne exactement le même résultat curieux pour moi...
As-tu regardé à quoi ressemble fonction après le toString() et avant le
replace() ? Il est probable que l'accolade est à la ligne suivante,
présentation la plus fréquente pour les fonctions définies sur plusieurs
lignes.
j'ai essayé en escapant ({) :
Pfff... c'est exactement comme de rajouter un dans la classe de
caractères : comme tu ne sais pas ce que tu fais, tu es peut-être en
train de rajouter un bug car dans certains langages le n'est pas
supprimé quand il est inutile. Et surtout cela obscurcit le code.
fonction = fonction.replace(/{(.|n)*/, '{...}');
ça donne exactement le même résultat curieux pour moi...
Ce qui est sûr c'est que ça ne pouvait pas arranger les choses, juste
les dégrader (tu aurais retrouvé la fonction complète).
Ayant compris qu'il y a un saut de ligne tu peux faire :
fonction = fonction.replace(/n(.|n)*/, '{...}');
As-tu regardé à quoi ressemble fonction après le toString() et avant le
replace() ? Il est probable que l'accolade est à la ligne suivante,
présentation la plus fréquente pour les fonctions définies sur plusieurs
lignes.
j'ai essayé en escapant ({) :
Pfff... c'est exactement comme de rajouter un dans la classe de
caractères : comme tu ne sais pas ce que tu fais, tu es peut-être en
train de rajouter un bug car dans certains langages le n'est pas
supprimé quand il est inutile. Et surtout cela obscurcit le code.
fonction = fonction.replace(/{(.|n)*/, '{...}');
ça donne exactement le même résultat curieux pour moi...
Ce qui est sûr c'est que ça ne pouvait pas arranger les choses, juste
les dégrader (tu aurais retrouvé la fonction complète).
Ayant compris qu'il y a un saut de ligne tu peux faire :
fonction = fonction.replace(/n(.|n)*/, '{...}');
As-tu regardé à quoi ressemble fonction après le toString() et avant le
replace() ? Il est probable que l'accolade est à la ligne suivante,
présentation la plus fréquente pour les fonctions définies sur plusieurs
lignes.
j'ai essayé en escapant ({) :
Pfff... c'est exactement comme de rajouter un dans la classe de
caractères : comme tu ne sais pas ce que tu fais, tu es peut-être en
train de rajouter un bug car dans certains langages le n'est pas
supprimé quand il est inutile. Et surtout cela obscurcit le code.
fonction = fonction.replace(/{(.|n)*/, '{...}');
ça donne exactement le même résultat curieux pour moi...
Ce qui est sûr c'est que ça ne pouvait pas arranger les choses, juste
les dégrader (tu aurais retrouvé la fonction complète).
Ayant compris qu'il y a un saut de ligne tu peux faire :
fonction = fonction.replace(/n(.|n)*/, '{...}');
"{" est un métacaractère non ?
"{" est un métacaractère non ?
"{" est un métacaractère non ?
Non. En tout cas pas tout seul, et encore moins dans une classe de
caractères. Par ailleurs, il n'y a aucune équivalence entre « être un
métacaractère » et « changer de sens quand on le précède de ». Cf. le
caractère n, par exemple ; dirais-tu que n est un métacaractère ?
Mais surtout, si tu rajoutes un devant un caractère qui n'en a pas
besoin, parfois ça supprime le sans rien dire et parfois ça le laisse,
selon le langage utilisé.
Or, comme tu n'as pas l'air de vouloir lire
les docs avant de faire quelque chose,
tu vas un jour te retrouver dans
un cas où ce qui fonctionnait en XXX? ne fonctionnera plus en YYY, et
tu viendras râler dans le groupe correspondant parce que ce n'est pas
logique.
Non. En tout cas pas tout seul, et encore moins dans une classe de
caractères. Par ailleurs, il n'y a aucune équivalence entre « être un
métacaractère » et « changer de sens quand on le précède de ». Cf. le
caractère n, par exemple ; dirais-tu que n est un métacaractère ?
Mais surtout, si tu rajoutes un devant un caractère qui n'en a pas
besoin, parfois ça supprime le sans rien dire et parfois ça le laisse,
selon le langage utilisé.
Or, comme tu n'as pas l'air de vouloir lire
les docs avant de faire quelque chose,
tu vas un jour te retrouver dans
un cas où ce qui fonctionnait en XXX? ne fonctionnera plus en YYY, et
tu viendras râler dans le groupe correspondant parce que ce n'est pas
logique.
Non. En tout cas pas tout seul, et encore moins dans une classe de
caractères. Par ailleurs, il n'y a aucune équivalence entre « être un
métacaractère » et « changer de sens quand on le précède de ». Cf. le
caractère n, par exemple ; dirais-tu que n est un métacaractère ?
Mais surtout, si tu rajoutes un devant un caractère qui n'en a pas
besoin, parfois ça supprime le sans rien dire et parfois ça le laisse,
selon le langage utilisé.
Or, comme tu n'as pas l'air de vouloir lire
les docs avant de faire quelque chose,
tu vas un jour te retrouver dans
un cas où ce qui fonctionnait en XXX? ne fonctionnera plus en YYY, et
tu viendras râler dans le groupe correspondant parce que ce n'est pas
logique.
amha, on ne se réfère à la doc que quand il y a un pb, il faut se poser
des questions, avoir rencontré un problème, pour aller lire une doc,
plutôt mal faite en ce qui concerne le "web", bien souvent on (je)
fonctionne par analogie d'un langage à un autre.
[...]
soit dit en passant je doute que Ecma-262.pdf soit une docum faite pour
l'utilisateur de js, c'est plutôt une spec écrite pour ceux, sans doute
très peu nombreux, qui implémentent js dans les naviagteurs.
[...] comme je ne me sent pas sûr en regexp je teste.
amha, on ne se réfère à la doc que quand il y a un pb, il faut se poser
des questions, avoir rencontré un problème, pour aller lire une doc,
plutôt mal faite en ce qui concerne le "web", bien souvent on (je)
fonctionne par analogie d'un langage à un autre.
[...]
soit dit en passant je doute que Ecma-262.pdf soit une docum faite pour
l'utilisateur de js, c'est plutôt une spec écrite pour ceux, sans doute
très peu nombreux, qui implémentent js dans les naviagteurs.
[...] comme je ne me sent pas sûr en regexp je teste.
amha, on ne se réfère à la doc que quand il y a un pb, il faut se poser
des questions, avoir rencontré un problème, pour aller lire une doc,
plutôt mal faite en ce qui concerne le "web", bien souvent on (je)
fonctionne par analogie d'un langage à un autre.
[...]
soit dit en passant je doute que Ecma-262.pdf soit une docum faite pour
l'utilisateur de js, c'est plutôt une spec écrite pour ceux, sans doute
très peu nombreux, qui implémentent js dans les naviagteurs.
[...] comme je ne me sent pas sûr en regexp je teste.