【发布时间】:2021-12-08 21:19:19
【问题描述】:
嗨,我正在尝试使用正则表达式,它只提取 ul 标签中的 li 标签(没有 ol)
文字:
<ul><li>some text</li></ul>
<ol><li>some text</li></lo>
提取
<ul>**<li>**some text</li></ul>
<ol><li>some text</li></lo>
你能帮我吗?
【问题讨论】:
嗨,我正在尝试使用正则表达式,它只提取 ul 标签中的 li 标签(没有 ol)
文字:
<ul><li>some text</li></ul>
<ol><li>some text</li></lo>
提取
<ul>**<li>**some text</li></ul>
<ol><li>some text</li></lo>
你能帮我吗?
【问题讨论】:
正则表达式解决方案
/(?<=<ul>\s*(?:<li>.*?<\/li>\s*)*)<li>.*?<\/li>/gi
如果您在团队中工作并且其他人可能会阅读您的代码,我建议您使用解决方案 2。通过代码阅读更简单易懂。
分两步完成:
<ol>...</ol>节点;<li>...</li> 节点。*我假设您的 html 是有效的,并且您在 <ul> 或 <ol> 之外没有 <li>。
JavaScript 中的代码示例:
let html = `
<ul>
<li>take this node 1</li>
<li>take this node 2</li>
</ul>
<ol>
<li>exclude this node</li>
<li>exclude this node</li>
</ol>
<ul>
<li>take this node 3</li>
<li>take this node 4</li>
</ul>
<ol>
<li>exclude this node</li>
<li>exclude this node</li>
</ol>
`;
let htmlWithoutOl = html.replace(/<ol>.*?<\/ol>/gis, '');
let matches = htmlWithoutOl.matchAll(/<li>.*?<\/li>/gis);
for (const match of matches) {
console.log(match[0]);
}
【讨论】: