如果我们正在做jQuery,只是标记TR并将其删除等,这是一个小问题。但我很好奇如何以严格的正则表达方式执行此操作...操纵dom。
我有这个:
<tr id="anyName">
<td>
// a bunch of html
</td>
</tr>
如何使用常规表达式将tr及其中的所有内容替换为&#34;&#34;。
我有这个:
sometable.replace(&#34;。*?&#34;,&#34;&#34;);
我尝试了其他一些东西,但我无法让它发挥作用。基本上,我想要tr及其所有内容。我正在使用服务器端模板引擎,它在进入视图之前处理所有这些数据。所以,我可以将这些数据作为字符串保存到这个模板逻辑中......然后将其删除..但由于它是一个字符串,我需要正则表达式来删除它。
有什么想法吗?我觉得我在这里错过了一些非常简单的东西。
答案 0 :(得分:4)
问题是<tr>
内部可以嵌套<tr>
个标签。
在某些情况下,<tr>
标记不具有结束标记(XHTML除外)
因此,即使在正则表达式中使用奇数编号模式,正则表达式也无法删除此类标记
所以,请不要使用正则表达式
由于您使用的是jquery,因此可以使用remove
$('tr').remove();
或者您可以使用其他服务器端的HTML解析器。但是不要使用正则表达式。它可能会破坏您的网站
要回答您的问题,您可以使用此正则表达式
(?s)<tr[^<>]*>(.(?!<tr[^<>]*>))*?</tr>
或在javascript中
/<tr[^<>]*>(.(?!<tr[^<>]*>))*?<\/tr>/s
但是等等。你需要不断更换它,直到它取代所有内容
所以,你需要使用 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):