2011-09-24 15 views
6

Realmente me gustaría tener una Regex que sea ejecutable en node.js (por lo que no hay jQuery DOM Handling etc., porque las etiquetas pueden tener una anidación diferente) que coincida con todas el texto que NO es una etiqueta HTML o parte de ella en grupos separados.Javascript Regex: coincide con el texto NO forma parte de una etiqueta HTML

E.g. Me gustaría para que coincida con "5", "ELT.", "SPR", " ", "plo", "Unterricht", " ", "& nbsp" y "plo" de esa cadena:

<tr class='list even'> 
    <td class="list" align="center" style="background-color: #FFFFFF" > 
     <span style="color: #010101">5</span> 
    </td> 
    <td class="list" align="center" style="background-color: #FFFFFF" > 
     <b><span style="color: #010101">ELT.</span></b> 
    </td> 
    <td class="list" align="center" style="background-color: #FFFFFF" > 
     <b><span style="color: #010101">SPR</span></b> 
    </td> 
    <td class="list" style="background-color: #FFFFFF" >&nbsp;</td> 
    <td class="list" align="center" style="background-color: #FFFFFF" > 
     <strike><span style="color: #010101">pio</span></strike> 
    </td> 
    <td class="list" align="center" style="background-color: #FFFFFF" > 
     <span style="color: #010101">Unterricht</span> 
    </td> 
    <td class="list" style="background-color: #FFFFFF" >&nbsp;</td> 
    <td class="list" style="background-color: #FFFFFF" >&nbsp;</td> 
    <td class="list" align="center" style="background-color: #FFFFFF" > 
     <b><span style="color: #010101">pio</span></b> 
    </td> 
</tr> 

Puedo asegurar que no habrá ">" dentro de las etiquetas.

La solución que encontré fue (?<=^|>)[^><]+?(?=<|$), pero eso no va a funcionar en Node.js (probablemente debido a que los símbolos de anticipación? Dice "Grupo no válido")

¿Alguna sugerencia? (y sí, realmente creo que Regex es el camino correcto porque el html puede estar anidado de otras maneras y el contenido siempre tiene el mismo orden porque es una tabla)

+2

Me encanta vincular a este http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – NimChimpsky

+0

¿Es esto lo que estás buscando? http://stackoverflow.com/questions/822452/strip-html-from-text-javascript –

+1

No puede usar expresiones regulares para analizar HTML (este es el punto del enlace que le dio @NimChimpsky), porque el HTML no es un elemento idioma. Cualquier intento de usar expresiones regulares, únicamente, para analizar HTML *** fallará ***. No tiene más remedio que * analizar * el HTML. –

Respuesta

3

Pruebe 'yourhtml'.replace (/ (< [^>] *>)/g' ')

'<tr class="list even"><td class="list" align="center" style="background-color: #FFFFFF" ><span style="color: #010101">5</span></td><td class="list" align="center" style="background-color: #FFFFFF" ><b><span style="color: #010101">ELT.</span></b></td><td class="list" align="center" style="background-color: #FFFFFF" ><b><span style="color: #010101">SPR</span></b></td><td class="list" style="background-color: #FFFFFF" > </td><td class="list" align="center" style="background-color: #FFFFFF" ><strike><span style="color: #010101">pio</span></strike></td><td class="list" align="center" style="background-color: #FFFFFF" ><span style="color: #010101">Unterricht</span></td><td class="list" style="background-color: #FFFFFF" > </td><td class="list" style="background-color: #FFFFFF" > </td><td class="list" align="center" style="background-color: #FFFFFF" ><b><span style="color: #010101">pio</span></b></td></tr>'.replace(/(<[^>]*>)/g,' ') 

dará un espacio de texto delimitado que desea hacer coincidir (que se puede dividir en el espacio).

+0

Yepp, eso es lo que haré, gracias. Pero usaré un buen UTF-8 Char o algo así. porque mis valores también pueden contener espacios en blanco, creo ... – iStefo

2

Tal vez se puede dividir directamente a través de las etiquetas a sí mismos:

html.split(/<.*?>/) 

Después se tiene que quitar las cadenas vacías a partir del resultado.

Cuestiones relacionadas