Olivier Miakinen a écrit :
> Le 13/07/2008 17:49, SAM a écrit :
>>
>> function dorepnull(sujet) {
>> sujet = sujet.replace(/(?<=[[,])(null,)*null[],]/,
>> function(match) {
>> return '#' + match.length/5 + match.substring(match.length-1);
>> });
>> return sujet;
>> }
>> alert(dorepnull($b));
>>
>> Erreur : invalid quantifier ?<=[[,])(null,)*null[],]
>> Code Source :
>> sujet = sujet.replace(/(?<=[[,])(null,)*null[],]/,
>
> Rhazut, je pensais pourtant que les assertions arrières faisaient partie
> du tronc commun Perl/PCRE.
Si ça peut aider :
<http://developer.mozilla.org/fr/docs/R%C3%A9f%C3%A9rence_de_JavaScript_1.5_Core:Objets_globaux:RegExp>
(sic)
les assertions avant,
décrites aux lignes (?=), (?!) et (?:) dans ce tableau
(/sic)
Où il semblerait que le "positive lookbehind assertion"
(je regarde devant par l'arrière)
doive (peut-être ?) s'écrire :
(?:[\[,]) ou : (?:[[,])
Pour les esssplications de l'expression originelle
/(?<=[[,])(null,)*null[],]/
voir : <4879c903$1@neottia.net>
> Autre problème, il ne comprend pas non plus [],] alors que [\],] marche bien.
Ha!? mon interrogation à ce sujet n'était donc pas si futile.
> Bref, j'ai testé ceci, et ça marche :
>
> ------------------------------------------------------------------------
> function dorepnull(sujet) {
> return sujet.replace(/[[,](null,)*null[\],]/g,
> function(match) {
> return match.substring(0,1) + '#' + (match.length-1)/5
> + match.substring(match.length-1);
> });
> }
> ------------------------------------------------------------------------
Il apparait que : /(?:[[,])(null,)*null[\],]/g
donne la même chose
> sujet = '[null,null,null,null,null]';
> alert(sujet + "\n" + dorepnull(sujet));
> sujet = '[a,null,b,null,null,c,null,d]';
> alert(sujet + "\n" + dorepnull(sujet));
> sujet = '[nullard,annulle,null,tronull,"null",null,nul]';
> alert(sujet + "\n" + dorepnull(sujet));
> ------------------------------------------------------------------------
--
sm