繁体   English   中英

RegExp用于html-tag entrie

[英]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);

的jsfiddle

这将创建一个空的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM