Newsgroup: it.comp.lang.javascript
Titolo: [RegExp] replace con funzione

Una domanda che forse è già stata fatta..
ho la necessità di applicare un replace con espressione regolare, ma
contemporaneamente richiamare un metodo (più in generale applicare una
funzione qualsiasi) alla stringa ottenuta dal match.
ad esempio:
var modTxt = txt.replace(/(\w+)/gi, '$1'.toLowerCase());
ma questo pare non funzionare..infatti pare che venga richiamato prima il
toLowerCase() e poi effettuata la sostituzione dei token.
Come posso fare ad applicare una funzione sui token stessi?
--
artemis.alpeia
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Come posso fare ad applicare una funzione sui token stessi?
Il secondo parametro di replace puo' essere una function (ed e' molto 
utile per eleaborazioni sui match):
var modTxt = txt.replace(/\w+/gi, function(){return 
arguments[0].toLowerCase()});
Come vedi i vari match vengono passati come argomenti alla funzione.
Ovviamente puoi anche dargli un nome e non ricorrere alla collection 
arguments:
var modTxt = txt.replace(/\w+/gi, function(a){return a.toLowerCase()});
Ho tolto le parentesi nel pattern della RegExp: il match "completo" 
viene sempre passato anche senza (metti un alert all'interno dopo aver 
ciclato la collection arguments e vedi cosa viene passato).

 ciclato la collection arguments e vedi cosa viene passato).
interessante, nel $0 quindi. Tuttavia l'esempio era giustappunto un esempio,
l'espressione regolare e' (ahime') ben piu' polposa. Grazie mille!


 l'espressione regolare e' (ahime') ben piu' polposa.
Dipendentemente da cosa devi fare, vi possono essere interessanti strade
alternative.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Deformazione professionale č:
Quando in ascensore senti la ragazza accanto che tira fuori il cellulare,
e ti volti per capire se e' un modello sul quale puoi sviluppare in J2ME.

 alternative.
l'idea era implementare un correttore di html che aggiungesse lo slash ai
tag senza figli (<hr />, <br />), quotasse gli attributi e portasse tutti i
nomi dei tag e degli attributi a minuscole. Per l'indentazione invece penso
sia indispensabile una macchina a stati che tenga memoria del livello di
annidamento, una regexp non è sufficiente
ad esempio avevo risolto la cosa in modo non troppo elegante sostituendo in
due passate contrassegnando le sequenze da elaborare con opportuni
delimitatori


nomi dei tag e degli attributi a minuscole.
Se vuoi studiarti il codice di programmi di questo tipo c'e' HTML
TIDY, ma non e' in Javascrip (C, Java, Perl)
http://www.w3.org/People/Raggett/tidy/
Se vuoi un pretty-printer basato sulle lib del precedente:
http://sourceforge.net/projects/htmltrim
'bye

 TIDY, ma non e' in Javascrip (C, Java, Perl)
Stavo per consigliargli la stessa cosa :)
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Io non soffro di pazzia, ne godo ogni minuto.
(I don't suffer from insanity, I enjoy every minute of it)

 nomi dei tag e degli attributi a minuscole.
Leggi il post che ti ha scritto Agostino, se gia' non hai dato un occhiata
a TIDY e derivate.
Cmq, perche' lo stai facendo in javascript? E' un'applicazione xul? :)
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Non esistono donne brutte. Dipende solo da quanta vodka bevi.
(proverbio russo)

 Cmq, perche' lo stai facendo in javascript? E' un'applicazione xul? :)
nope! non ho ancora avuto il piacere di approfondire l'argomento. Si tratta
di un plugin per un formattatore di testi tutto in javascript che uso da un
paio d'anni e mi serve per manipolare rapidamente testi di ogni tipo


 uso da un paio d'anni e mi serve per manipolare rapidamente testi di ogni tipo
Uhm, mi sfugge qualcosa. L'hai sviluppato te? Perche' in javascript, se non
ti appoggi a xul? Non sarebbe stato preferibile usare un altro tipo di
linguaggio..?
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Deformazione professionale è:


 linguaggio..?
se lo rifacessi daccapo probabilmente si, ma e' nato cosi' e per il momento
va bene il "basta che funzioni"


 va bene il "basta che funzioni"
Capisco. :) Era semplice curiosita'.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
I feel like I'm diagonally parked in a parallel universe.