Newsgroup: it.comp.www.asp
Titolo: Mi aiutate con una RegExp?

Devo trovare una RegExp che mi trovi in un testo la parola indicata ma
solo se al di fuori dei tag e non dentro ai tag.
Per capirci:
Sostituire "ciccio" in:
Ciccio ciccione, cosi' <a href="ciccio.asp"
title="ciccionissimo">ciccione</a> che dirgli <span
class="ciccionone">ciccionissimo</span> non basta <hr
class="ciccionello" />
con "XXXXXX" mi deve riportare:
XXXXXX XXXXXXne, cosi' <a href="ciccio.asp"
title="ciccionissimo">XXXXXXne</a> che dirgli <span
class="ciccionone">XXXXXXnissimo</span> non basta <hr
class="ciccionello" />
e non:
XXXXXX XXXXXXne, cosi' <a href="XXXXXX.asp"
title="XXXXXXnissimo">XXXXXXne</a> che dirgli <span
class="XXXXXXnone">XXXXXXnissimo</span> non basta <hr
class="XXXXXXnello" />
Non ci riesco :(

 solo se al di fuori dei tag e non dentro ai tag.
Secondo me non la trovi una singola regex, devi spezzettarti la stringa e
giocarci un po'.
Se la trovi posta che sono curioso.
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.


A un primo tentativo ho fatto questo:
da cercare: (.[^<]*)(ciccio)(.[^>]*)
da sostituire: $1XXXXXX$3
Risultato:
Ciccio XXXXXXne, cosi' <a href="ciccio.asp"
title="ciccionissimo">XXXXXXne</a> che dirgli <span
class="ciccionone">XXXXXXnissimo</span> non basta <hr
class="XXXXXXnello" />
Rimane l'attributo in HR. Prova a rielaborarlo un po'
Ti allego il mio "tool" :-)
che mi aiuta molto nelle prove.
============
<script language='JavaScript'>
function doRE()
{
 HTMLin=""+form1.inText.value;
 regEx1 = new RegExp(form1.regIn.value,"gi");
 HTMLin=HTMLin.replace(regEx1,form1.regOut.value);
 form1.outText.value=HTMLin;
}
</script>
<form name="form1" method="post" action="">
  <p>
  <textarea name="inText" cols="50" rows="20" id="in">
</textarea>
    <textarea name="outText" cols="50" rows="20" id="out"></textarea>
  </p>
  <p>
    <input name="regIn" type="text" id="regIn" value="" size="40">
    <input name="regOut" type="text" id="regOut" value="($1)($2)($3)"
size="40">
    <input type="button" name="Button" value="^^" onclick="doRE()">
  </p>
</form>
============
-- 
___________________________________________________________
a p bertolini
(Tribů Digitale Blackmambo: 
www.blackmambo.it
)

 Rimane l'attributo in HR. Prova a rielaborarlo un po'
Rimane anche ciccio all'inizio della frase :(

 Rimane anche ciccio all'inizio della frase :(
Perché è maiuscolo e io cerco "ciccio" con la minuscola.
Alex
-- 
___________________________________________________________
a p bertolini
(Tribù Digitale Blackmambo: 
www.blackmambo.it
)

 Perché è maiuscolo e io cerco "ciccio" con la minuscola.
No, succede perché con il tuo sistema trovi solo i ciccio che stanno
tra un tag di apertura e uno di chiusura.
Anche se metto ciccio in minuscolo non lo trovi.


boh... non mi torna...
Fammi sapere se trovi qualche soluzione!
Alex.


 da cercare: (.[^<]*)(ciccio)(.[^>]*)
Il problema č che in [^<]* possono rimanere
invischiate anche occorrenze valide
Ad es. con "ciccio1 ciccio2 ciccio3" si ottiene:
$1="ciccio1 ciccio2 "
$2="ciccio"
$3="3"
e quindi gli elementi in $1 vengono ignorati
Una soluzione potrebbe essere quella di fare
piů passate, con un ciclo che ripete finché la
stringa non cambia piů.
Oppure si puň spezzare la stringa in
nontag-tag-nontag-tag-... per effettuare
un replace solo nelle zone sicure.

potresti provare in questo modo...
tempo fa creai uno script che eliminava tutti i tag html da una stringa,
leggendo tutti i caratteri dall'inizio alla fine.
al tag "<" attivavo una variabile, al ">" la disattivavo.
puoi usare questo sistema per copiare in una variabile temporanea tutto cio' 
che si trova
al di fuori dei tag e su questa fare la sostituzione delle parole.
in un'altra variabile ci metti invece i tag e tutto cio' che contengono, e 
mano mano che vai avanti
rimetti poi insieme i pezzi (io eliminavo quelli entro i tag...)
se vuoi in caso ti dico lo script..
ciao ciao 

 Se la trovi posta che sono curioso.
Non per te che gia' la sai :)
ma a chi interessa, l'espressione da usare e':
ciccio(?![^<>]*>)

, fino al successivo > ...
Alex


 capito.
Nel newsgroup di javascript è stato spiegato esaurientemente da chi l'ha
fatto, buttaci un occhio se ti interessa.
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.