使用 document parser 和 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");
您可以通过检查doc.documentElement 来查看结果,这给了我们:
<html>
<head></head>
<body>
<span title="use a <label>">
Some Content
<span title="use a <div>">
Some Other Content
</span>
</span>
</body>
</html>
因为你的标签没有正确关闭,它解析它很奇怪,但没关系。文本内容仍然是内容。
接下来,我们使用document walker 提取所有文本节点。你可以使用createTreeWalker创建一个新的walker,传入NodeFilter.SHOW_TEXT:
var walker = doc.createTreeWalker(
doc.documentElement, // root
NodeFilter.SHOW_TEXT, // what to show
null, // filter
false); // reference expansion
然后我们可以遍历树并收集所有遍历的节点:
var node;
var textNodes = [];
while (node = walker.nextNode()) {
textNodes.push(node);
}
最后,我们得到了想要的数组:
var content = textNodes.map(x => x.textContent);
Content 是一个数组,其中包含所需的结果集 ["Some Content", "Some Other Content"]。