如何在JavaScript中不使用正则从字符串提取数字?
JavaScript非正则提取字符串中的数字方法
当然可以不用正则表达式提取字符串中的数字,下面是几个简洁实用的方案:
方案1:筛选所有数字字符并拼接
这种方法会提取字符串中所有数字字符并拼接成一个完整数字,适合需要整合所有数字的场景:
const extractNumber = str => { const numChars = Array.from(str).filter(char => char >= '0' && char <= '9'); const numStr = numChars.join(''); return numStr ? Number(numStr) : NaN; }; // 测试示例 console.log(extractNumber("id is 12345")); // 输出 12345 console.log(extractNumber("num: 123, code: 456")); // 输出 123456
方案2:提取第一组连续数字
如果只需要提取字符串中第一组连续的数字,可以通过定位数字的起始和结束位置来实现,效率更高:
function extractFirstNumber(str) { let startIdx = -1; let endIdx = -1; for (let i = 0; i < str.length; i++) { const char = str[i]; if (char >= '0' && char <= '9') { if (startIdx === -1) startIdx = i; endIdx = i; } else if (startIdx !== -1) { // 遇到非数字且已找到数字起始,终止循环 break; } } return startIdx !== -1 ? Number(str.slice(startIdx, endIdx + 1)) : NaN; } // 测试示例 console.log(extractFirstNumber("id is 12345")); // 输出 12345 console.log(extractFirstNumber("num: 123, code: 456")); // 输出 123
方案3:遍历拼接(基础写法)
如果喜欢更直观的遍历逻辑,也可以用普通循环逐个收集数字字符:
function extractNumber(str) { let numStr = ''; for (const char of str) { if (char >= '0' && char <= '9') { numStr += char; } } return numStr ? Number(numStr) : NaN; } // 测试示例 console.log(extractNumber("id is 12345")); // 输出 12345
这些方法都不需要依赖正则表达式,逻辑清晰且易于调整,可根据实际需求选择合适的方案。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

