Node.js中如何匹配对应div闭合标签并提取指定内容?
提取指定div标签内的内容(Node.js环境)
问题说明
现有HTML代码:
<div class="body"> <h1>ddd</h1> <p>dadfsaf</p> <div id="name"> <div class="des">psd</div> <div>www</div> </div> <div>ppp</div> </div>
需要提取id="name"的div标签内部的内容,目标结果为:
<div class="des">psd</div> <div>www</div>
尝试用正则表达式<div id="name">.*</div>无法实现需求,求可行解决方法。
为什么正则不行
正则天生不适合处理HTML这类嵌套结构的文档:
- 默认情况下
.不会匹配换行符,就算开启多行模式,也会匹配到第一个</div>就终止,没法识别嵌套标签的闭合关系。 - HTML格式灵活(比如空格、换行、属性顺序变化),正则很难覆盖所有场景,后续维护成本极高。
推荐解决方案:用HTML解析库Cheerio
Node.js里最方便的方式是用Cheerio(轻量版jQuery核心)来解析操作HTML,步骤如下:
1. 安装Cheerio
npm install cheerio
2. 编写代码
const cheerio = require('cheerio'); const html = ` <div class="body"> <h1>ddd</h1> <p>dadfsaf</p> <div id="name"> <div class="des">psd</div> <div>www</div> </div> <div>ppp</div> </div> `; // 加载HTML内容 const $ = cheerio.load(html); // 提取目标div的内部内容并去除首尾空白 const targetContent = $('#name').html().trim(); console.log(targetContent);
运行结果
控制台输出就是你要的目标内容:
<div class="des">psd</div> <div>www</div>
备选方案:用原生DOM解析(jsdom)
如果不想依赖第三方库,可以用Node.js的jsdom模块模拟浏览器DOM环境:
1. 安装jsdom
npm install jsdom
2. 编写代码
const { JSDOM } = require('jsdom'); const html = ` <div class="body"> <h1>ddd</h1> <p>dadfsaf</p> <div id="name"> <div class="des">psd</div> <div>www</div> </div> <div>ppp</div> </div> `; // 创建DOM环境 const dom = new JSDOM(html); const document = dom.window.document; // 获取目标元素并提取内部内容 const nameDiv = document.getElementById('name'); const targetContent = nameDiv.innerHTML.trim(); console.log(targetContent);
内容的提问来源于stack exchange,提问作者Bin
相关产品推荐
相关产品推荐

