¿Hay un RegExp que podría usar en String.replace () para reemplazar saltos de línea con etiquetas br, en texto que contenga etiquetas html ... como si no contuviera etiquetas (ignore completamente las líneas que contienen solo etiquetas).

Por ejemplo, si tengo un siguiente texto + entrada html.

<p>
    line one
    line <b>two</b>bold
    line three
</p>

Se convertiría

<p>
    line one<br>
    line <b>two</b>bold<br>
    line three
</p>

Cualquier ayuda es muy apreciada

0
Rainer Plumer 2 sep. 2014 a las 23:42

2 respuestas

La mejor respuesta

No tan clara, pero esta sería una idea:

str = str.replace(/([^>]) *\r?\n(?! *<)/g, "$1<br>");

Reemplaza \r?\n a <br> si está precedido por un no > y cualquier cantidad de espacios. Verificando con un lookahead negativo, si no hay < precedido por cualquier cantidad de espacios después de eso.

Donde supuse que querías evitar algo como <br><br> o <br></p> :)

Prueba: fiddle, regex101

0
Jonny 5 2 sep. 2014 a las 20:29

No creo que este sea un buen trabajo para regex. Probablemente sea mejor usar un búfer FIFO para leer 2 líneas a la vez, y si la primera tiene solo una etiqueta (supongo que puede usar una expresión regular para detectar), simplemente lea la siguiente línea (descartando la línea con la etiqueta) y rehacer. Si no detecta una etiqueta en la primera línea, agregue <br> a la segunda línea y reemplace la línea.

Aquí hay una expresión regular rápida y sucia para analizar etiquetas (tenga en cuenta que esto es solo para demostración, no manejará etiquetas mal formadas y probablemente se romperá fácilmente_):

<[a-z]+>

Y aquí hay un lugar para jugar con él.

Para el búfer, puede usar un Array con shift() y push() para deshacerse de la línea anterior y leer en la línea siguiente, respectivamente. Verifique el primer elemento en la matriz con la expresión regular, si pasa, cambie el segundo elemento y reemplace la cadena en el archivo con la nueva.

Así es como debería verse:

< test = ['first', 'second']
> Array [ "first", "second" ]
< test.shift()
> "first"
< test.push('third')
> 2
< test
> Array [ "second", "third" ]

< es mi entrada a la consola javascript y > es lo que devuelve.

0
mechalynx 2 sep. 2014 a las 20:15