ZBLOG

前端浏览器有什么库能直接解析获取原始文本值的URL

在前端浏览器中,如果需要直接解析 HTML 并获取 原始未标准化 的 URL 属性值(如 hrefsrcaction),可以使用以下库或方法:


1. 使用 htmlparser2(纯解析,不触发 DOM 标准化)

适用场景:需要轻量级、快速的 HTML 解析,避免浏览器自动补全 URL。
安装

  1. npm install htmlparser2

示例代码

  1. import { Parser } from 'htmlparser2';
  2. const html = `
  3. <a href="/path?query=1">Link</a>
  4. <img src="image.png">
  5. `;
  6. const attributes = [];
  7. const parser = new Parser({
  8. onopentag(name, attrs) {
  9. if (attrs.href) attributes.push({ tag: name, attr: 'href', value: attrs.href });
  10. if (attrs.src) attributes.push({ tag: name, attr: 'src', value: attrs.src });
  11. }
  12. });
  13. parser.write(html);
  14. parser.end();
  15. console.log(attributes); // 输出原始属性值

优点

  • 不依赖浏览器 DOM,直接解析原始文本。
  • 保留原始值(如相对路径、未编码的查询参数)。

2. 使用 cheerio(类似 jQuery 的服务器端 DOM 操作)

适用场景:需要类似 jQuery 的 API,同时避免 URL 标准化。
安装

  1. npm install cheerio

示例代码

  1. import * as cheerio from 'cheerio';
  2. const html = `
  3. <a href="/path?query=1">Link</a>
  4. <img src="image.png">
  5. `;
  6. const $ = cheerio.load(html);
  7. const elements = $('[href], [src]').map((_, el) => {
  8. const $el = $(el);
  9. return {
  10. tag: el.tagName,
  11. attr: $el.attr('href') ? 'href' : 'src',
  12. value: $el.attr('href') || $el.attr('src')
  13. };
  14. }).get();
  15. console.log(elements); // 输出原始属性值

优点

  • 兼容 jQuery API,易上手。
  • 默认返回原始属性值(除非手动调用 new URL())。

3. 原生方案:正则表达式 + DOMParser

如果不想引入第三方库,可以结合正则表达式和 DOMParser(参考之前回答的方法2):

  1. function getRawAttributes(html) {
  2. const doc = new DOMParser().parseFromString(html, 'text/html');
  3. const elements = [...doc.querySelectorAll('[href], [src]')];
  4. return elements.map(el => {
  5. const outerHTML = el.outerHTML;
  6. const attrName = el.hasAttribute('href') ? 'href' : 'src';
  7. const rawValue = outerHTML.match(new RegExp(`${attrName}=["']([^"']*)["']`, 'i'))?.[1];
  8. return { tag: el.tagName, attr: attrName, value: rawValue };
  9. });
  10. }

关键区别总结

方案 是否标准化 URL 依赖环境 适用场景
htmlparser2 ❌ 保留原始值 Node.js/浏览器 需要最高性能的底层解析
cheerio ❌ 保留原始值 Node.js/浏览器 jQuery-like API + HTML5标准
DOMParser+正则 ❌ (需额外处理) 仅浏览器 无依赖的原生方案

注意事项

  1. 编码问题:
    • htmlparser2/cheerio返回的值可能是编码后的(如 &amp;→&)),需手动解码:
      1. const decodedValue = new DOMParser().parseFromString(value, 'text/html').body.textContent;
  2. XSS防护:
    • 如果解析用户输入的 HTML,确保对结果进行消毒(如使用 DOMPurify)。

根据你的需求选择最适合的方案!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23120

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?