如何使用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
相关产品推荐
相关产品推荐

