在字符串
中some text <p id='item_1' class='item'>multiline content\r\n\r\n for <br/>remove</p><br clear='all' id='end_of_item_1'/><p id='item_2' class='item'>another multiline content\r\n\r\n</p><br clear='all' id='end_of_item_2'/>
我需要删除
<p id='item_1' class='item'>multiline content\r\n\r\n for <br/>remove</p><br clear='all' id='end_of_item_1'/>
无法找到办法。
var id = 'item_1';
var patt=new RegExp("<p id='"+id+"'(.)*|([\S\s]*?)end_of_"+id+"'\/>","g");
var str="some text <p id='item_1' class='item'>multiline content\r\n\r\n for <br/>remove</p><br clear='all' id='end_of_item_1'/><p id='item_2' class='item'>another multiline content\r\n\r\n</p><br clear='all' id='end_of_item_2'/>";
document.write(str.replace(patt,""));
结果是
some text for
<br>
remove
<p></p>
<br id="<p id=" class="item" clear="all" item_2'="">
another multiline content
<p></p>
<br id="end_of_item_2" clear="all">
请帮助解决这个问题。
答案 0 :(得分:0)
为什么不能使用DOM API删除它? (将所有内容添加到文档中,然后删除不需要的内容)
var item1 = document.getElementById('item_1'),
endOfItem1 = document.getElementById('end_of_item_1');
item1.parentNode.removeChild(item1);
endOfItem1.parentNode.removeChild(endOfItem1);
答案 1 :(得分:0)
我需要从你的问题中假设一些不言而喻的限制,以使其发挥作用:
我猜对了,你想要一个正则表达式,可以找到(然后替换)具有特定id的任何'p'标签,直到具有id的某个标签(例如'br'标签) 'end_of_ [firstid]'?
如果这是正确的,那么以下正则表达式可能适合您。可能是,你需要稍微修改一下,让JS接受它:
<p\s+id='([a-zA-Z0-9_]+)'.*?id='end_of_\1'\s*\/>
这将为您提供任何带有上述标准的星座,以及如果id为组1的名称,现在应该是一个简单的任务,检查group1是否包含您要删除的ID然后替换整个与空字符串匹配。
如果我理解你的例子是正确的(我对JavaScript不是很好,而我的RegEx基于一般的perl-regex方式),你可能会做类似以下的事情:
var patt=new RegExp("<p\s+id='"+id+"'.*?id='end_of_"+id+"'\s*\/>","g");
这样,你不必担心群组匹配,虽然我觉得它更优雅,可以通过群组匹配你想要的ID,而不是将其插入RegEx。
答案 2 :(得分:0)
这是当前场景的正则表达式。当正则表达式方法最终破解时,请记住我们警告用正则表达式解析HTML是一个愚蠢的差事。 ;)
此:
var s = "some text <p id='item_1' class='item'>multiline content\r\n\r\n for <br/>remove</p><br clear='all' id='end_of_item_1'/><p id='item_2' class='item'>another multiline content\r\n\r\n</p><br clear='all' id='end_of_item_2'/><ul><li>";
var id = 'item_1';
var patt = new RegExp ("<p[^<>]*\\sid=['\"]" + id + "['\"](?:.|\\n|\\r)*<br[^<>]*\\sid=['\"]end_of_" + id + "['\"][^<>]*>", "ig")
var stripped = s.replace (patt, "");
产生这个:
"some text <p id='item_2' class='item'>another multiline content
</p><br clear='all' id='end_of_item_2'/><ul><li>"