Newsgroup: it.comp.lang.javascript
Titolo: Regex su più righe

Ciao a tutti
Mi sono impantantato su questa regEx ( di cui ammetto di saperne poco)
regEx = new RegExp("<!-- start -->.*<!-- end -->", "gm");
readyPage = regEx.exec( pag );
Nelle mie intenzioni iniziali, mettendo una intera pagina html (presa
da una chiamata ajax) dentro la vairiabile "pag", avrei voluto
estrarre TUTTO l'html compreso tra quei due tag di commento.
Non va.
Mi prende solo la prima riga.
Ho truccato la cosa eliminando tutti gli \n presenti in "pag"... ma mi
sembra una truscata... e non mi sta bene anche per altri motivi.
Come faccio?
Grazie!
Mario

 Mi prende solo la prima riga.
    ...skipped!
Questa sotto dovrebbe fare quanto chiedi:
<html><head>
<script type=text/javascript>
var strHtml = '<!-- start --><body><div>Nelle mie intenzioni iniziali, mettendo\nuna intera pagina html (presa da una chiamata ajax)\n dentro la vairiabile "pag", avrei voluto estrarre\nTUTTO l\'html compreso tra quei due tag di\ncommento.</div></body><!-- end -->';
alert(strHtml);
alert(strHtml.replace(/>(.|[\r\n])*</g,"$1<"));
</script>
</head><body></body></html>
-- 
    * b *
  *   y   *
*   Piero   *
[ /beati monocoli in terra caecorum/ ] 

 Questa sotto dovrebbe fare quanto chiedi:
Mhm. Direi che l'uso del condizionale è stato proprio azzeccato. :)
-- 
~ Religions change, but beer and wine remain. (Harvey Allen)

 Mhm. Direi che l'uso del condizionale è stato proprio azzeccato. :)
Perché ho capito il contrario? :-)
Allora serve questo:
alert(strHtml.replace(/.*->([^\x7F]+)<.*/g,"$1"));
-- 
    * b *
  *   y   *
*   Piero   *
[ /rebus sic stantibus/ ] 

 alert(strHtml.replace(/.*->([^\x7F]+)<.*/g,"$1"));
Quasi. Leggendo la regexp così, due cose ancora non mi convincono:
a) Se i tag contenessero una stringa vuota, verrebbe restituita la
stringa originale, in quanto il pattern non viene matchato. Per me
sarebbe più corretto restituire la suddetta stringa vuota, invece.
b) l'OP ha chiesto l'html compreso tra "quei" due tag di commento.
Se invece io ho due tag di commento che invece di "start" e "end",
contengono "pippo" e "pluto", la regexp recupererebbe il codice di
markup tra essi contenuto.
Anzi, per com'è adesso basterebbe un solo tag di commento, seguito
da un qualsiasi tag (di chiusura o apertura poco importa).
A naso, direi che anche con una stringa siffatta avresti problemi:
<div>Testo<!-- start --> do <u>re</u> mi<!-- end -->fa</div>
Perché restituirebbe "fa".
-- 
~ "Chi ci priva della libertà in nome della sicurezza,
non si merita nessuna delle due cose, nè la libertà,
nè la sicurezza." (Henry Adams)

 Perché restituirebbe "fa".
Conoscendola avrei fatto semplicemente:
alert(strHtml.replace(/.*->([^\x7F]+)<!.*/g,"$1"));
oppure nemmeno devo conoscere il testo da trattare?
Postala anche tu una regexp, vedrai che anch'io saprò cambiare il testo
in modo che non funzioni più. ;-)
-- 
    * b *
  *   y   *
*   Piero   *
[ /in medio stat virtus/ ] 

 in modo che non funzioni più. ;-)
Eh mi sa che hai frainteso il post dell'OP, e pure il mio. :)
-- 
"Se c'è qualcosa di più importante del mio ego su questa nave,
la voglio catturata e fucilata."

 Eh mi sa che hai frainteso il post dell'OP, e pure il mio. :)
Dici? :-D
A proposito: hai cambiato NR? Solo mentre lo sto spedendo mi sono
accorto del cambio del greeting. :-)
-- 
    * b *
  *   y   *
*   Piero   *
[ /deus ex machina/ ] 

 accorto del cambio del greeting. :-)
No, è che delle volte da casa uso il Mac. :)
-- 
~ "It may be that the old astrologers had the truth exactly reversed,
when they believed that the stars controlled the destinies of men.
The time may come when men control the destinies of stars."
(Arthur C. Clarke)

 per estrarre il testo tra di essi contenuto.
Vediamo se con questo ci capiamo. ;-)
<SCRIPT type=text/javascript>
var strHtml = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\n<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">\n<META content="MSHTML 6.00.2800.1400" name="GENERATOR">\n<html><head></head><body>\n<div>Nelle mie intenzioni iniziali, mettendo\nuna intera pagina html\n<!-- comment -->\n<!-- start -->\n<!-- comment -->\n(presa da una chiamata ajax)\n<!-- comment -->\n<!-- end -->\ndentro la variabile "pag", avrei voluto estrarre\n<!-- comment -->\nTUTTO l\'html compreso tra quei due tag di\ncommento.</div>\n</body></html>';
alert(strHtml);
//la regexp sotto salva TUTTO il testo compreso fra<!-- start --> e <!-- end -->
alert(strHtml.replace(/(.|[\r\n])*<!-- start -->([^\x7F]+)<!-- end -->(.|[\r\n])*.*/g,"$2"));
    ...skipped!
-- 
    * b *
  *   y   *
*   Piero   *
[ /ad maiora/ ] 

 Vediamo se con questo ci capiamo. ;-)
Guarda, ho visto che hai aggiunto i marcatori e non la guardo troppo
nel dettaglio. L'importante, è che tu abbia compreso quel che volevo
dirti sulla richiesta dell'OP. :)
Ma giusto per curiosità, la regexp di Sembro la Carta non ti piaceva
proprio, eh? :)
Tra l'altro riprendeva il modus operandi dell'OP.
-- 
~ La donna è un male, ma un male necessario.
(Aulo Gellio)