2010-09-10 22 views
7

Spero che qualcuno possa aiutarmi. Non sono esattamente sicuro di come usare la regex seguente. Sto usando ASP classico con JavaScriptRegex rimuovi le interruzioni di riga

completehtml = completehtml.replace(/\<\!-- start-code-remove --\>.*?\<\!-- start-code-end --\>/ig, ''); 

Ho questo codice per rimuovere tutto tra

<\!-- start-code-remove --\> e <\!-- start-code-end --\>

funziona perfettamente fino al punto in cui si trova line breaks nel valori compresi tra start e end codice ...

Come faccio a scrivere l'espressione regolare per rimuovere tutto tra start e end anche se c'è line breaks

Grazie mille per la risposta ...

Shoud uso il \n e \s caratteri non sicuro al 100% ..

(/\<\!-- start-code-remove --\>\s\n.*?\s\n\<\!-- start-code-end --\>/ig, ''); 

anche il codice non dovrebbe essere avidi tra <\!-- start-code-remove --\> <\!-- start-code-end --\>/ e catturare i valori nei gruppi ...

Potrebbero esserci 3 o più di questi set ...

risposta

6

Il punto non corrisponde alle nuove righe in Javascript, né esiste un modificatore per farlo (diversamente dalla maggior parte dei motori regex moderni). Una soluzione comune consiste nell'usare questa classe di caratteri al posto del punto: [\s\S]. Quindi la tua regex diventa:

completehtml = completehtml.replace(
    /\<\!-- start-code-remove --\>[\s\S]*?\<\!-- start-code-end --\>/ig, ''); 
3

Provare (.|\n|\r)*.

completehtml = completehtml.replace(/\<\!-- start-code-remove --\>(.|\n|\r)*?\<\!-- start-code-end --\>/ig, ''); 
+0

Non sarebbe '[. \ N \ r] *' essere migliore? –

+0

@Billy, l'ho provato. Non ha funzionato per me per qualche motivo. – RightSaidFred

+2

Ah .. ora capisco perché. '.' non è riconosciuto come metacarattere all'interno delle classi di caratteri. –

2

Source

v'è infatti alcun/s modificatore a fare la partita punto tutti i personaggi, tra cui interruzioni di riga. Per abbinare assolutamente qualsiasi carattere, puoi usare la classe di caratteri che contiene una classe abbreviata e la sua versione negata, come [\ s \ S].

+0

Grazie Billy, la tua risposta ... Sono andato per la risposta qui sotto, dato che l'intero codice è stato scritto, ma apprezzo molto l'input –

0

Il supporto per Regex in javascript non è molto affidabile.

function remove_tag_from_text(text, begin_tag, end_tag) { 
    var tmp = text.split(begin_tag); 
    while(tmp.length > 1) { 
     var before = tmp.shift(); 
     var after = tmp.join(begin_tag).split(end_tag); 
     after.shift(); 
     text = before + after.join(end_tag); 
     tmp = text.split(begin_tag); 
    } 
    return text; 
} 
+1

Errr .. Non so cosa sia esattamente inaffidabile a riguardo. Ancora più importante, non so perché implementeresti questo tipo di cose in termini di suddivisioni e join: è terribilmente brutto. –

+0

Ciao Paulo grazie per il feedback - il mio codice è formattato correttamente quindi non ho paura che il javascript si possa rompere ma grazie per il suggerimento –

+0

@Billy: non tutte le proprietà dell'oggetto RegExp sono supportate tra le diverse marche e versioni del browser. Split/Join bricks sono brutti ma si comporta molto bene. –

Problemi correlati