我正在编写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的新手。
答案 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);
这会创建一个空的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文本框中输入,用于说明一个想法,而不是解决世界问题。