我想捕获两个HTML标记之间的所有内容,包括内容和标记。我认为它不一定非常强大,但理想情况下它可以处理这种边缘情况:
foo <div>>bar</div>> baz
返回应该是:
foo > baz
我尝试了什么:
有很多RegExs for stripping out HTML tags,但我没有找到任何可以删除内容的东西。到目前为止,我有这个:
\<(.*)\>
但这是贪婪的并且返回
foo bar
答案 0 :(得分:3)
您可以解析DOM而不是使用RegExp:
var text = [];
var TEXT_NODE = 3;
Array.prototype.forEach.call(
document.getElementById('test').childNodes,
function (n) {
if (n.nodeType === TEXT_NODE)
text.push(n.textContent)
}
);
console.log(text.join(''));
答案 1 :(得分:2)
我知道你要求Regex,but you can do it more robustly by interacting with the DOM
<div id="test">foo <div>>bar</div>> baz</div>
alert(
document.getElementById('test').firstChild.nodeValue +
document.getElementById('test').lastChild.nodeValue
);
// foo > baz
答案 2 :(得分:1)
我将在这里借用@JuanMendes的答案,但总结一下 - 毕竟,你可能不仅仅有两个这样的节点;)
function strip(source) {
var div = document.createElement('div');
div.innerHTML = source;
var nodes = div.childNodes;
var retarr = [];
for( var i = nodes.length-1; i >= 0; i--) {
if( nodes[i].nodeType == 3) retarr.unshift(nodes[i].nodeValue);
}
return retarr.join("");
}
var html = "foo <div>>bar</div>> baz";
alert(strip(html)); // foo > baz
答案 3 :(得分:-3)
试试这个:
var subject = "foo <div>>bar</div>> baz";
var result = subject.replace(/^(.*?)(?:<.*>)(.*?)$/, "$1>$2");
console.log(result);
//foo > baz