如何用.includes()查找1000-100000范围内的数字?
解决方法:用正则匹配1000-100000范围的数字或指定格式
你的原代码存在关键逻辑错误:e.textContent.includes(',000' || ',9' || ...) 写法无效。|| 运算符会直接返回第一个非空字符串 ',000',后面的,9等条件根本不会生效,导致只能匹配带,000的内容。
要实现匹配1000-100000的数字或x,xxx to xxx,xxx格式,推荐使用正则表达式,以下是两种可行方案:
方案一:直接匹配目标格式
如果目标文本格式固定(千分位数字或范围),可以用正则直接匹配:
const numShare = await page.$$eval(".FormData", els => { // 匹配1000-100000的千分位数字,或x,xxx to xxx,xxx格式 const targetRegex = /(?:\b(?:\d{1,2},\d{3}|100,000)\b)|(?:\b\d{1,2},\d{3} to \d{1,2},\d{3}\b)/; const targetElement = els.find(el => targetRegex.test(el.textContent)); if (targetElement) { // 提取匹配到的具体内容 const matchResult = targetElement.textContent.match(targetRegex); return matchResult ? matchResult[0].trim() : targetElement.parentNode.textContent.trim(); } return null; // 未找到时返回null,可根据需求调整 }); return numShare;
正则说明:
\b:单词边界,避免匹配长数字的片段(比如123,4567里的23,456)\d{1,2},\d{3}:匹配1-99,999的千分位数字(1,000到99,999)100,000:精确匹配100,000\d{1,2},\d{3} to \d{1,2},\d{3}:匹配x,xxx to xxx,xxx的范围格式
方案二:提取数字后判断范围
如果文本格式不固定,更稳妥的方式是提取所有数字,去掉千分位逗号后判断数值范围:
const numShare = await page.$$eval(".FormData", els => { const targetElement = els.find(el => { // 提取所有带千分位的数字 const numberStrs = el.textContent.match(/\d{1,3}(?:,\d{3})+/g) || []; // 转换为数字并检查是否在1000-100000之间 return numberStrs.some(str => { const num = parseInt(str.replace(/,/g, ''), 10); return num >= 1000 && num <= 100000; }); }); if (targetElement) { return targetElement.parentNode.textContent.trim(); } return null; }); return numShare;
针对你编辑后的代码优化
如果已经通过节点关系定位到目标元素,直接在evaluate里用正则提取即可:
const numShare = await page.evaluate(() => { const targetEl = document.querySelector(".FormData")?.parentNode.nextElementSibling.nextElementSibling; if (!targetEl) return null; const text = targetEl.textContent.trim(); const targetRegex = /(?:\b(?:\d{1,2},\d{3}|100,000)\b)|(?:\b\d{1,2},\d{3} to \d{1,2},\d{3}\b)/; const matchResult = text.match(targetRegex); return matchResult ? matchResult[0] : text; // 未匹配到返回原文本,可调整 }); return numShare;
内容的提问来源于stack exchange,提问作者Jojo Amankwa
相关产品推荐
相关产品推荐

