2010-09-10 43 views
7

Espero que alguien me pueda ayudar. No estoy exactamente seguro de cómo usar la siguiente expresión regular. Estoy utilizando ASP clásico con JavascriptRegex eliminar saltos de línea

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

Tengo este código para eliminar todo lo que entre

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

Funciona perfecto hasta el punto donde hay line breaks en el valores entre start y end código ...

¿Cómo voy a escribir la expresión regular para eliminar todo lo que entre start y end incluso si hay line breaks

Un millón de gracias por responder ...

Shoud utilizo el \n y \s caracteres no es 100% seguro ..

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

también el código no debe ser codicioso entre <\!-- start-code-remove --\> <\!-- start-code-end --\>/ y capturar los valores en grupos ...

Podría haber 3 o más de estos conjuntos ...

Respuesta

6

El punto no coincide con las nuevas líneas en Javascript, ni hay un modificador para hacerlo (a diferencia de la mayoría de los motores de expresiones regulares modernas). Un trabajo común es utilizar esta clase de caracteres en lugar del punto: [\s\S]. Entonces su expresión regular se convierte en:

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

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

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

Would not '[. \ N \ r] *' ser mejor? –

+0

@Billy, Intenté eso. No funcionó para mí por alguna razón. – RightSaidFred

+2

Ah ... ahora veo por qué. '.' no se reconoce como un metacarácter dentro de las clases de caracteres. –

2

Source

desde luego no hay/s modificador para hacer el partido de puntos todos los caracteres, incluyendo los saltos de línea. Para hacer coincidir absolutamente cualquier carácter, puede usar una clase de carácter que contenga una clase de taquigrafía y su versión negada, como [\ s \ S].

+0

Gracias Billy, agradezco su respuesta ... Fui por la respuesta a continuación, ya que tenía todo el código escrito, pero realmente aprecio la entrada –

0

El soporte de Regex en javascript no es muy confiable.

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 .. No sé exactamente qué es poco confiable al respecto. Más importante aún, no sé por qué implementarías este tipo de cosas en términos de divisiones y uniones, eso es horrendo y malo. –

+0

Hola, Paulo, gracias por los comentarios: mi código está formateado correctamente, así que no tengo miedo de que el javascript se rompa, pero gracias por la sugerencia –

+0

@Billy: no todas las propiedades de los objetos RegExp son compatibles con las diferentes marcas y versiones del navegador. Los trucos de Split/Join son feos pero funcionan muy bien. –

Cuestiones relacionadas