Javascript Regex:匹配文本不是HTML标记的一部分

时间:2011-09-24 17:02:56

标签: javascript regex node.js

我真的想要一个在node.js中可执行的正则表达式(所以没有jQuery DOM处理等,因为标签可以有不同的嵌套),它匹配所有非HTML标签或部分文本的文本它成为一个单独的群体。

E.g。我想匹配“5”,“ELT。”,“SPR”,“”,“plo”,“Unterricht”,“”,“& nbsp”和“plo” 从那个字符串:

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

我可以确保标签中没有“&gt;”。

我找到的解决方案是(?<=^|>)[^><]+?(?=<|$),但这在node.js中不起作用(可能是因为前瞻了?它说“无效组”)

有什么建议吗? (是的,我真的认为Regex是正确的方法,因为html可能以其他方式嵌套而且内容总是具有相同的顺序,因为它是一个表)

2 个答案:

答案 0 :(得分:3)

试试'yourhtml'.replace(/(&lt; [^&gt;] *&gt;)/ 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,' ')

它会给出一个你想要匹配的空格分隔文本(可以在空格上分割)。

答案 1 :(得分:2)

也许您可以直接使用标签进行拆分:

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

之后你必须从结果中删除空字符串。