如何从任意位置提取字符串中的ESR数值?(Node.js+tesseract.js场景)
解决ESR数值提取问题
针对你遇到的两种字符串格式,用正则表达式可以完美适配,比split更灵活。以下是两种可靠的实现方式:
方法一:提取所有数字后取最后一个
适用于你的场景——目标数值要么是唯一数字,要么是字符串末尾的数字:
function extractESRValue(str) { // 匹配所有连续数字 const numberMatches = str.match(/\d+/g); if (!numberMatches) return null; // 无数字时返回null // 返回最后一个匹配到的数字 return numberMatches[numberMatches.length - 1]; } // 测试验证 console.log(extractESRValue('ESR 14 fm')); // 输出 "14" console.log(extractESRValue('ESR Less Than 10 mm/1st Hour 15')); // 输出 "15"
方法二:精准匹配两种场景
如果需要更严格的匹配(避免其他无关数字干扰),可以分别针对两种格式写正则:
function extractESRValue(str) { // 优先匹配字符串末尾的数字(对应第二种格式) const endNumber = str.match(/(\d+)\s*$/); if (endNumber) return endNumber[1]; // 匹配ESR后的数字(对应第一种格式) const esrFollowNumber = str.match(/ESR\s+(\d+)/); if (esrFollowNumber) return esrFollowNumber[1]; return null; // 无匹配时返回null }
为什么split不行?
split依赖固定分隔符,第二种格式中ESR后的内容是Less Than 10...,用split('ESR ')拆分后再处理会拿到无关内容,正则则可以直接定位数字位置,不受中间文本影响。
内容的提问来源于stack exchange,提问作者Mehdi Faraji
相关产品推荐
相关产品推荐

