You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Cheerio通过正则表达式匹配模式获取标签属性?

解决Cheerio匹配带数字后缀的属性问题

你的代码有几个关键问题导致无法正常工作,我来一步步帮你修正:

原代码的问题分析

  1. 正则表达式未正确创建:你用字符串模板生成了re变量,但没有把它转换成真正的正则表达式对象,而且$(e).attr(/re/)里的/re/是固定字面量,不是引用变量re的正则。
  2. Cheerio的attr()方法局限性:即使传对了正则,attr()默认只会返回第一个匹配的属性值,无法获取所有符合模式的属性。

解决方案:遍历所有属性并过滤

我们可以先获取元素的所有属性,再通过正则筛选出符合前缀-数字格式的属性,根据你的需求提供两种实现方式:

方式1:按属性前缀分组为数组(推荐)

把同前缀的属性按数字索引整理成数组,方便后续按顺序访问:

const attribs = ['captionText', 'httpUri'];
const tag = {};

// 获取元素的所有属性集合
const elementAttribs = $(e).get(0).attribs;

attribs.forEach(attrPrefix => {
  // 创建正则:匹配以指定前缀开头,后跟"-数字"的属性名
  const attrRegex = new RegExp(`^${attrPrefix}-(\\d+)$`);
  
  // 遍历所有属性键值对
  Object.entries(elementAttribs).forEach(([attrName, attrValue]) => {
    const matchResult = attrName.match(attrRegex);
    if (matchResult) {
      const index = matchResult[1]; // 提取属性名中的数字索引
      // 初始化前缀对应的数组(如果不存在)
      if (!tag[attrPrefix]) {
        tag[attrPrefix] = [];
      }
      // 将值存入对应索引的位置
      tag[attrPrefix][index] = attrValue;
    }
  });
});

// 最终输出示例:
// tag = {
//   captionText: ['bla bla', 'bada bing bada boom'],
//   httpUri: ['https://path/to/server0', 'https://path/to/server2']
// }

方式2:保留原始属性名作为键

如果你希望直接保留captionText-0这类完整属性名作为对象的键,可以用下面的代码:

const attribs = ['captionText', 'httpUri'];
const tag = {};

const elementAttribs = $(e).get(0).attribs;

attribs.forEach(attrPrefix => {
  const attrRegex = new RegExp(`^${attrPrefix}-\\d+$`);
  Object.entries(elementAttribs).forEach(([attrName, attrValue]) => {
    // 检查属性名是否匹配模式
    if (attrRegex.test(attrName)) {
      tag[attrName] = attrValue;
    }
  });
});

// 最终输出示例:
// tag = {
//   'captionText-0': 'bla bla',
//   'captionText-1': 'bada bing bada boom',
//   'httpUri-0': 'https://path/to/server0',
//   'httpUri-1': 'https://path/to/server2'
// }

关键说明

  • $(e).get(0).attribs:Cheerio对象的get(0)方法可以获取对应的原生DOM元素(或Cheerio包装的元素对象),其attribs属性包含了该元素的所有属性键值对。
  • 正则表达式中的^和$:确保属性名完全匹配前缀-数字的格式,避免误匹配类似captionText-0-extra这类不符合预期的属性。

内容的提问来源于stack exchange,提问作者punkish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 00:22:29