正则表达式。删除所有内容直到结束tr标记

时间:2013-07-02 02:49:32

标签: javascript regex

如果我们正在做jQuery,只是标记TR并将其删除等,这是一个小问题。但我很好奇如何以严格的正则表达方式执行此操作...操纵dom。

我有这个:

<tr id="anyName">
    <td>
         // a bunch of html
    </td>
</tr>

如何使用常规表达式将tr及其中的所有内容替换为&#34;&#34;。

我有这个:

sometable.replace(&#34;。*?&#34;,&#34;&#34;);

我尝试了其他一些东西,但我无法让它发挥作用。基本上,我想要tr及其所有内容。我正在使用服务器端模板引擎,它在进入视图之前处理所有这些数据。所以,我可以将这些数据作为字符串保存到这个模板逻辑中......然后将其删除..但由于它是一个字符串,我需要正则表达式来删除它。

有什么想法吗?我觉得我在这里错过了一些非常简单的东西。

2 个答案:

答案 0 :(得分:4)

问题是<tr>内部可以嵌套<tr>个标签。

在某些情况下,<tr>标记具有结束标记(XHTML除外)

因此,即使在正则表达式中使用奇数编号模式,正则表达式也无法删除此类标记

所以,请不要使用正则表达式


由于您使用的是jquery,因此可以使用remove

$('tr').remove();

或者您可以使用其他服务器端的HTML解析器。但是不要使用正则表达式。它可能会破坏您的网站


要回答您的问题,您可以使用此正则表达式

 (?s)<tr[^<>]*>(.(?!<tr[^<>]*>))*?</tr>

或在javascript中

 /<tr[^<>]*>(.(?!<tr[^<>]*>))*?<\/tr>/s

demo

但是等等。你需要不断更换它,直到它取代所有内容

所以,你需要使用 for loop 并循环直到它取代所有..

但是这个正则表达式可能会破坏,因为没有结束标记

答案 1 :(得分:0)

@Anirudh是对的;由于嵌套的<tr>标记和未关闭的<tr>标记,这可能是一个非常棘手的问题。但假设您没有嵌套或未关闭的<tr>标记,您确实可以使用正则表达式来解决此问题。

// if your html is in a variable called "html", you can get rid of <tr> tags thusly:
html = html.replace( /<tr[^]*?<\/tr>/, '' );

请注意,我们无法在开始和结束.*标记之间使用<tr>。为什么?因为.通配符与换行符不匹配,因此[^]的“匹配任何内容”组。另请注意,我们不会尝试匹配开始<tr>标记中的结束尖括号,因为标记中可能存在属性。

如果您的HTML格式正确,则

但是,如果你想要保留这些评论,你必须要小心(并且养成一般思考的习惯是一件好事):如果你使用默认的贪婪<tr>量词,它会狼吞虎咽从第一个开始*标记到最后一个结束标记的所有内容,包括评论和<tr>标记之间的任何无效代码。要解决此问题,请通过附加<tr>

使量词变得懒惰

请在此处查看我的解决方案(使用JavaScript,不使用 jQuery):

http://jsfiddle.net/TpeEj/2/