You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:不使用正则表达式提取字符串数字数组并保留单个0

修正方案:提取数字数组(保留单个0且不使用正则)

原代码的核心问题是:将连续数字字符拼接后直接用parseInt转换,导致全0的连续序列(如"00""000")被压缩成单个0,无法满足保留所有单个0的需求;而对于包含非0的多位数(如"67""700"),则需要保持为单个数字元素。

修正后的代码

function extractNumbers(string) {
    const arrNumbs = [];
    let currentDigits = "";

    for (let i = 0; i < string.length; i++) {
        const elem = string.charAt(i);
        if (!isNaN(elem)) {
            currentDigits += elem;
        } else {
            if (currentDigits) {
                processDigitSequence(currentDigits, arrNumbs);
                currentDigits = "";
            }
        }
    }

    // 处理字符串末尾的数字序列
    if (currentDigits) {
        processDigitSequence(currentDigits, arrNumbs);
    }

    return arrNumbs;
}

// 处理单个数字序列的辅助函数
function processDigitSequence(digits, resultArr) {
    let isAllZero = true;
    // 判断当前序列是否全为0
    for (const char of digits) {
        if (char !== '0') {
            isAllZero = false;
            break;
        }
    }

    if (isAllZero) {
        // 全0序列:每个0单独加入数组
        for (let i = 0; i < digits.length; i++) {
            resultArr.push(0);
        }
    } else {
        // 含非0的序列:转成整数加入数组
        resultArr.push(parseInt(digits, 10));
    }
}

// 测试示例
const testStr = "00ghj67 h4 h000ytff700jhjk80";
console.log(extractNumbers(testStr)); // 输出: [0, 0, 67, 4, 0, 0, 0, 700, 80]

逻辑说明

  1. 遍历收集数字序列:遍历字符串时,持续将连续的数字字符存入currentDigits变量,遇到非数字字符时触发序列处理。
  2. 分情况处理序列:
    • 若序列全为0:根据序列长度,向结果数组中添加对应数量的单个0。
    • 若序列包含非0数字:将整个序列转换为整数后添加到结果数组。
  3. 收尾处理:遍历结束后,处理字符串末尾可能剩余的未被触发处理的数字序列。

内容的提问来源于stack exchange,提问作者Nata77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:57:30