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

如何使用JavaScript/jQuery在HTML内容中匹配正则并提取数据?

解决正则表达式从document.body.outerHTML提取数据的问题

看起来你在尝试用正则从页面body的完整HTML中提取格式为Bxx(xx是两位数字)的字符串,但代码里的几个小问题导致没拿到预期结果。我来帮你梳理下问题并给出修复方案:


问题分析

  • 不必要的jQuery转换:你把document.body.outerHTML传给jQuery构造函数,再用.html()获取内容,这完全是多余的操作。而且.html()返回的是body内部的HTML(相当于document.body.innerHTML),并非你原本想要的完整outerHTML(包含<body>标签本身)。
  • 正则缺少全局匹配标志:你的正则/(B[0-9]{2})/默认只匹配第一个符合条件的字符串,想要获取所有匹配项,必须加上全局标志g,也就是/(B[0-9]{2})/g。
  • 方法使用冗余:直接对原始HTML字符串调用match()即可完成匹配,不需要绕jQuery这一圈增加复杂度。

修正后的代码

class executionPrompt {
  constructor(){
    this.regex = /(B[0-9]{2})/g; // 添加全局匹配标志g
    this.data = [];
  }
  start(){
    const html = document.body.outerHTML; // 直接获取完整的outerHTML字符串
    this.data = html.match(this.regex) || []; // 匹配所有结果,无匹配时返回空数组避免null
    console.log(this.data);
  }
}

// 调用示例
const promptInstance = new executionPrompt();
promptInstance.start();

额外说明

如果你的需求是提取分组内容(比如只获取B后面的两位数字),可以用exec()配合循环来实现:

start(){
  const html = document.body.outerHTML;
  let match;
  // 重置正则的lastIndex,避免多次调用时出现异常
  this.regex.lastIndex = 0;
  while((match = this.regex.exec(html)) !== null){
    this.data.push(match[1]); // 提取正则分组1的内容(即两位数字)
  }
  console.log(this.data);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:33:50