如何在JavaScript中不使用正则表达式提取字符串中的连续数字?
问题分析
你的代码当前是将每个数字字符单独转换后加入数组,所以会把连续的数字拆分成单个元素。要实现需求,需要区分处理非0开头的连续数字序列和单独的0:非0开头的连续数字需要合并成一个数,每个单独的0直接作为元素加入数组。
修改后的代码
let str = "asdf123d6lkj006m90" let func = function(inputString){ let outputArray = [] let currentNumber = "" for(let element of inputString){ // 判断当前字符是否为有效数字 if (!isNaN(element) && element.trim() !== '') { if (currentNumber === "") { if (element === "0") { // 单独的0直接加入数组 outputArray.push(0); } else { // 非0开头,开始累积连续数字 currentNumber += element; } } else { // 已有累积的非0开头数字,继续追加 currentNumber += element; } } else { // 遇到非数字字符,处理累积的数字 if (currentNumber !== "") { outputArray.push(Number(currentNumber)); currentNumber = ""; } } } // 遍历结束后,处理剩余的累积数字 if (currentNumber !== "") { outputArray.push(Number(currentNumber)); } return outputArray; } console.log(func(str)) // 输出: [123, 6, 0, 0, 6, 90]
代码逻辑说明
- 用
currentNumber变量累积非0开头的连续数字字符; - 遇到单个
0时,直接将0加入结果数组,不进行累积; - 遇到非0的数字字符且当前无累积时,开始累积连续数字;
- 遇到非数字字符时,将累积的数字转换为数值加入数组,并清空累积变量;
- 遍历结束后,检查是否有未处理的累积数字,确保最后一段数字被加入数组。
内容的提问来源于stack exchange,提问作者Enedwaith
相关产品推荐
相关产品推荐

