从字符串中去掉HTML标记及其内容的正则表达式是什么?
What's a regex to strip out both HTML tags and their contents from a string
我想捕获两个HTML标记之间的所有内容,包括内容和标记。我想它不必那么健壮,但理想情况下它可以处理这种边缘情况:
foo <div>>bar</div>> baz
返回值应该是:
foo > baz
我试过了:
有很多用于剥离HTML标签的regex,但我还没有发现任何也剥离内容的regex。到目前为止,我有这个:
'<(.*)'>
但是那是贪婪的并且返回
foo bar
您可以解析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(''));
http://jsfiddle.net/S5CT3/我知道您要求使用Regex,但您可以通过与DOM交互来实现更健壮的功能
<div id="test">foo <div>>bar</div>> baz</div>
alert(
document.getElementById('test').firstChild.nodeValue +
document.getElementById('test').lastChild.nodeValue
);
// foo > baz
我将在这里借用@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
jsFiddle演示
试试这个:
var subject = "foo <div>>bar</div>> baz";
var result = subject.replace(/^(.*?)(?:<.*>)(.*?)$/, "$1>$2");
console.log(result);
//foo > baz
现场演示
相关文章:
- 不接受0-0-0的正则表达式是什么
- 匹配某个字符后所有文本的正则表达式是什么
- 查找大写字母的简单正则表达式是返回小写字母
- 我的电子邮件正则表达式有什么问题
- 印地语数字的正则表达式是什么
- 以下情况的有效正则表达式是什么
- 这个正则表达式有什么问题
- 匹配正确字符串的确切正则表达式是什么
- 从 JMeter 的正则表达式提取器中的字符串“什么是 (123+43)”中提取 123+43 的正则表达式是什么?
- 用于验证范围内十进制值的正则表达式是什么 - 0 到 99999.00
- 用于删除两个“”之间的字符的正则表达式是什么/"在javascript中
- 这个php正则表达式边界集的等效JavaScript正则表达式是什么
- 这个正则表达式是什么意思.检查http或https超链接就足够了吗
- JavaScript's replace()替换第二次出现的":"的正则表达式是什么?
- 只返回SSN的数字部分的javascript正则表达式是什么?
- javascript中以下需求的正则表达式是什么
- 有人能解释一下这个正则表达式是做什么的吗?
- 从youtube url获取视图代码的正则表达式是什么?
- 给定一个有效的href,原点、路径名、搜索和散列的正则表达式是什么?
- 从字符串中去掉HTML标记及其内容的正则表达式是什么?