2011-09-24 15 views
6

Naprawdę chciałbym mieć Regex, który jest wykonywalny w node.js (więc nie ma obsługi jQuery DOM itp., Ponieważ tagi mogą mieć inne zagnieżdżenie), który pasuje do wszystkich tekst, który NIE jest tagiem HTML ani jego częścią w oddzielne grupy.Javascript Regex: Dopasuj tekst NIE część znacznika HTML

E.g. Chciałbym, aby dopasować "5", "ELT.", "SPR", " ", "OWP", "Unterricht", " ", "& nbsp" i "OWP" z tego łańcucha:

<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> 

Mogę zapewnić, że w tagach nie będzie znaków ">".

Rozwiązanie znalazłem (?<=^|>)[^><]+?(?=<|$), ale to nie będzie działać w node.js (prawdopodobnie dlatego, że lookaheads? Mówi „Nieprawidłowa grupa”)

Wszelkie sugestie? (i tak, naprawdę myślę, że Regex jest właściwą drogą, ponieważ html może być zagnieżdżony na inne sposoby, a zawartość zawsze ma tę samą kolejność, ponieważ jest to tabela)

+2

Uwielbiam linkować do tego http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – NimChimpsky

+0

Czy tego właśnie szukasz? http://stackoverflow.com/questions/822452/strip-html-from-text-javascript –

+1

Nie możesz używać wyrażeń regularnych do parsowania HTML (to jest punkt linku @NimChimpsky podany), ponieważ HTML nie jest zwykłym język. Każda próba użycia wyrażeń regularnych, wyłącznie do parsowania HTML *** zakończy się niepowodzeniem ***. Nie masz wyboru, musisz tylko * przeanalizować * kod HTML. –

Odpowiedz

3

Wypróbuj '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,' ') 

to daje spacjami tekstu, który chcesz dopasować (które można podzielić na przestrzeni).

+0

Yepp, to co zrobię, thx. Ale użyję ładnego UTF-8 Char lub sth. ponieważ moje wartości mogą zawierać białe spacje, jak myślę ... – iStefo

2

Może można podzielić bezpośrednio za pomocą tagów siebie:

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

Następnie trzeba usunąć pustych strun z wyniku.

Powiązane problemy