Le 14/07/2008 01:07, SAM a écrit :
>>
>> 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>
Merci, c'est dans mes signets (du moins chez moi, je dois faire pareil
au boulot).
> (sic)
> les assertions avant,
> décrites aux lignes (?=), (?!) et (?:) dans ce tableau
> (/sic)
Les deux premières sont des assertions (en avant), la troisième est
juste une façon d'empêcher les parenthèses d'être capturantes.
>
> Où il semblerait que le "positive lookbehind assertion"
> (je regarde devant par l'arrière)
> doive (peut-être ?) s'écrire :
> (?:[\[,]) ou : (?:[[,])
Non, visiblement il n'y a que les assertions en avant : positive (?=...)
et négative (?!...). Il n'y a pas les assertions en arrière, ni positive
(?<=...) ni négative (?<!...).
>> Autre problème, il ne comprend pas non plus [],] alors que [\],] marche bien.
>
> Ha!? mon interrogation à ce sujet n'était donc pas si futile.
Je dois le reconnaître.
>> ------------------------------------------------------------------------
>> 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);
>> });
>> }
>> ------------------------------------------------------------------------
Puisque les assertions en avant sont reconnues, on peut alors simplifier
la fonction :
------------------------------------------------------------------------
function dorepnull(sujet) {
return sujet.replace(/[[,](null,)*null(?=[\],])/g,
function(match) {
return match.substring(0,1) + '#' + match.length/5;
});
}
------------------------------------------------------------------------
J'ai testé (Seamonkey et IE), ça marche.