RegEx for html-tag条目

时间:2013-11-15 15:17:50

标签: javascript html regex

我正在编写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的新手。

3 个答案:

答案 0 :(得分:1)

如果你可以使用嵌套的address标签,那么正在构建一个正则表达式。

如果没有,您可以将"<address .*?</address>"替换为""

Javascript:.replace(/<address .*?<\/address>/g, "");

否则,请使用解析器;)

一些文档:http://www.regular-expressions.info/repeat.html,“懒惰而非贪婪”​​一章。

答案 1 :(得分:1)

如何从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>

现在,它还将未拆封的文本分解为“文本节点”。因此,您创建的Node元素的firstChild将是文本块(或几乎所有非HTML标记):

  

一些虚拟文字,仅此而已。

答案 2 :(得分:0)

不要使用正则表达式来解析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文本框中输入,用于说明一个想法,而不是解决世界问题。