Javascript 用于将HTML标记与特定属性匹配的正则表达式

Javascript 用于将HTML标记与特定属性匹配的正则表达式,javascript,html,regex,dom,regex-group,Javascript,Html,Regex,Dom,Regex Group,我有一根像 <span title="use a <label>">Some Content</span> <span title="use a <div>">Some Other Content</span> 一些内容 其他一些内容 我需要一个正则表达式来只获取某些内容或某些其他内容忽略标记,即使标记中有另一个标记您可能会有一些想法 正则表达式:“>(*)其他一些内容使用a和DOM方法来获取内容,而不是正则表达式。对于

我有一根像

<span title="use a <label>">Some Content</span>
<span title="use a <div>">Some Other Content</span>
一些内容
其他一些内容

我需要一个正则表达式来只获取
某些内容
某些其他内容
忽略标记,即使标记中有另一个标记

您可能会有一些想法

正则表达式:“>(*)其他一些内容使用a和DOM方法来获取内容,而不是正则表达式。对于这项工作来说,正则表达式显然是错误的工具。即使您可以获得一个有效的正则表达式,它也将很难理解,而且非常脆弱。下面的解决方案更健壮、更容易理解、更容易调试

首先创建解析器并解析文档片段:

var parser = new DOMParser();
var doc = parser.parseFromString(
    '<span title="use a <label>">Some Content</label><span title="use a <div>">Some Other Content</label>',
    "text/html");
因为你的标签没有正确关闭,所以它会奇怪地解析它,但这并不重要。文本内容仍然是内容

接下来,我们使用提取所有文本节点。您可以使用创建一个新的walker,传入:

然后,我们可以遍历树并收集所有遍历的节点:

var node;
var textNodes = []; 
while (node = walker.nextNode()) {
    textNodes.push(node);
}
最后,我们得到所需的数组:

var content = textNodes.map(x => x.textContent);

内容是一个数组,包含所需的结果集。

我们可以使用一个简单的表达式收集所需的文本内容,可能使用:

">(.+?)<\/

如果您使用的是JS,并且使用的是DOM。Regex是用于此作业的错误工具。同意@Amy。您是否在页面中刮取页面或JS?无效的html是故意的吗?例如,在span-opening标记上有一个closing-label标记。Regex是错误的工具。
var node;
var textNodes = []; 
while (node = walker.nextNode()) {
    textNodes.push(node);
}
var content = textNodes.map(x => x.textContent);
">(.+?)<\/