[英]RegExp for html-tag entrie
我正在编写javascript,我必须使用RegExp选择一些文本。 Cheatsheets对我没有帮助。
我有一个文字:
Some dummy text and nothing more.<address style='text-align: right;'><span style='color: #EA5528; font: 13px Arial !important;'>asd</span></address>
所以除了文本之外我想删除所有文本:address-tag和里面的所有内容。 预期结果:
Some dummy text and nothing more.
没什么,但我是RegExps的新手。
如果您可以使用嵌套的address
标记,那么构建正则表达式将非常困难。
如果没有,您可以用"<address .*?</address>"
替换"<address .*?</address>"
""
。
Javascript: .replace(/<address .*?<\\/address>/g, "");
否则,使用解析器;)
一些文档: http : //www.regular-expressions.info/repeat.html ,“懒惰而非贪婪”一章。
如何从HTML中创建元素并选择第一个孩子? 让您的浏览器做繁重的工作:
var elem = document.createElement();
elem.innerHTML = "Some dummy text and nothing more.<address style='text-align: right;'><span style='color: #EA5528; font: 13px Arial !important;'>asd</span></address>";
console.log(elem.firstChild.nodeValue);
这将创建一个空的HTML元素,然后将HTML设置为所需的HTML。 现在您的浏览器将整个事情视为:
<Node>
Some dummy text and nothing more.<address style='text-align: right;'><span style='color: #EA5528; font: 13px Arial !important;'>asd</span></address>
</Node>
现在,它还将unrwapped文本分解为“文本节点”。 因此,您创建的Node
元素的firstChild将是文本块(或几乎任何非HTML标记):
一些虚拟文本,仅此而已。
不要使用正则表达式来解析html ...
获取文本所在的节点,遍历childNodes,跳过地址节点,为剩余元素收集innerText。
这样的事情可能有用:
var element = document.getElementById('message'),
result = '', i = 0;
for (i = 0; i < element.childNodes.length; i ++)
{
var e = element.childNodes.item(i);
if (e is HTMLElement && e.localName.toUpperCase() == 'ADDRESS')
{
// skip these
} else {
result += e.innerText;
}
}
请注意,这是未经测试的,在SO文本框中键入并提供以说明想法,而不是解决世界问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.