Regexp按类和标记名称删除字符串中的递归html

时间:2017-03-07 08:42:50

标签: javascript regex node.js replace

有人可以帮我解决这个问题:

console.log('<span class="tooltip">aaaa</span><b>ok</b> <span class="tooltip">bbbb</span>'.replace('/<span .*?class="(.*?tooltip.*?)">(.*?)<\/span>/\g', ''))

我想删除带有类名.tooltip的span标签,这样就可以在控制台中打印&#34; 确定&#34;

此外,我不想修剪字符串,因此如果存在任何隐藏字符,则不应删除\n

2 个答案:

答案 0 :(得分:2)

你可以这样做:

const data = '<span class="tooltip">aaaa</span><b>ok</b> <span class="tooltip">bbbb</span>'
const removeTags = data => data.replace(/\s*<span.*?class="tooltip".*?>(.*?)\s*<\/span>\s*/g, '')

console.log(removeTags(data))

这也符合多线:

const data = `<span class="tooltip">aaaa

</span><b>ok</b> <span class="tooltip">bbbb</span>`
const removeTags = data => data.replace(/(?:\s|\n)*<span(?:.|\n)*?class="tooltip"(?:.|\n)*?>(?:[^])*?(?:\s|\n)*<\/span>(?:\s|\n)*/g, '')
console.log(removeTags(data))

答案 1 :(得分:0)

您可以使用.getElementsByClassName()找到它们,.remove()删除它们:

&#13;
&#13;
var input = '<span class="tooltip">aaaa</span><b>ok</b> <span class="tooltip">bbbb</span>';
var dom = document.createElement("div");
var toRemove;

dom.innerHTML = input;
toRemove = dom.getElementsByClassName("tooltip");
while (toRemove.length > 0) {
  toRemove[0].remove();
}
console.log(dom.innerHTML);
&#13;
&#13;
&#13;

对于更复杂的选择,您可以使用.querySelectorAll()

这种方法无疑不使用正则表达式,但它具有易于维护和更强大的优点(HTML不是常规语言,因此cannot be reliably parsed with regular expressions)。