2011-09-24 30 views
6

Tôi thực sự muốn có Regex có thể thực thi trong node.js (do đó không cần xử lý jQuery DOM, v.v. vì các thẻ có thể có lồng khác nhau) khớp với tất cả văn bản KHÔNG phải là một thẻ HTML hoặc một phần của nó thành các nhóm riêng biệt.Javascript Regex: Văn bản đối sánh KHÔNG phải là một phần của thẻ HTML

Ví dụ: Tôi muốn đối sánh "5", "ELT", "SPR", " ", "plo", "Unterricht", " ", "& nbsp" và "plo" từ chuỗi đó:

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

Tôi có thể đảm bảo rằng sẽ không có ">" trong thẻ.

Giải pháp tôi thấy được (?<=^|>)[^><]+?(?=<|$), nhưng điều đó sẽ không làm việc trong Node.js (có lẽ vì lookaheads? Nó nói "Nhóm không hợp lệ")

Bất kỳ lời đề nghị? (và có, tôi thực sự nghĩ rằng Regex là đúng cách để đi vì html có thể được lồng nhau theo những cách khác và nội dung luôn có cùng thứ tự vì đó là một bảng)

+2

Tôi thích liên kết đến http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – NimChimpsky

+0

Đây có phải là những gì bạn đang tìm kiếm không? http://stackoverflow.com/questions/822452/strip-html-from-text-javascript –

+1

Bạn không thể sử dụng cụm từ thông dụng để phân tích cú pháp HTML (đây là điểm của liên kết @NimChimpsky đã cung cấp cho bạn), bởi vì HTML không phải là thông thường ngôn ngữ. Bất kỳ nỗ lực nào sử dụng cụm từ thông dụng, chỉ để phân tích cú pháp HTML *** sẽ không thành công ***. Bạn không có lựa chọn nào khác ngoài thực sự * phân tích cú pháp * HTML. –

Trả lời

3

Hãy thử '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,' ') 

Nó sẽ cung cấp cho một không gian văn bản phân định mà bạn muốn kết hợp (mà bạn có thể chia nhỏ trên không gian).

+0

Yepp, đó là những gì tôi sẽ làm, thx. Nhưng tôi sẽ sử dụng một CharF-8 Char hay sth. vì giá trị của tôi có thể chứa khoảng trắng cũng như tôi nghĩ ... – iStefo

2

Có lẽ bạn có thể chia nhỏ trực tiếp sử dụng các thẻ tự:

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

Sau đó bạn cần phải loại bỏ các chuỗi sản phẩm nào từ kết quả.

Các vấn đề liên quan