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

JavaScript数字检测函数问题:重叠拼写数字识别异常

解决方案:用正则正向预查处理重叠数字词,结合位置排序解决指针逻辑问题

原代码的核心问题在于手动维护指针i的逻辑过于僵硬,硬编码的i--仅能处理共享单个字符的重叠场景(如twone),但无法应对连续不重叠的数字词(如twothree),导致后续数字词被遗漏。

解决思路

放弃手动逐个字符匹配的方式,改用以下步骤:

  1. 正则正向预查捕获所有重叠/非重叠数字词:利用(?=...)正向预查特性,无需消耗字符即可捕获所有可能的数字词(包括重叠的情况,如twone中的two和one)。
  2. 收集所有数字的位置信息:同时提取阿拉伯数字和英文数字词的出现位置,确保后续能按输入顺序排序。
  3. 按位置排序生成结果字符串:将所有数字按出现顺序排列,再提取首尾字符组成最终结果。

修正后的代码

function detectNumbers(input) {
    const wordToNumbers = new Map([
        ['zero', '0'],
        ['one', '1'],
        ['two', '2'],
        ['three', '3'],
        ['four', '4'],
        ['five', '5'],
        ['six', '6'],
        ['seven', '7'],
        ['eight', '8'],
        ['nine', '9']
    ]);

    const numberEntries = [];

    // 捕获所有英文数字词(含重叠)
    const wordRegex = /(?=(zero|one|two|three|four|five|six|seven|eight|nine))/g;
    let match;
    while ((match = wordRegex.exec(input)) !== null) {
        numberEntries.push({
            pos: match.index,
            num: wordToNumbers.get(match[1])
        });
    }

    // 捕获所有阿拉伯数字
    const digitRegex = /\d/g;
    while ((match = digitRegex.exec(input)) !== null) {
        numberEntries.push({
            pos: match.index,
            num: match[0]
        });
    }

    // 按出现位置排序
    numberEntries.sort((a, b) => a.pos - b.pos);

    // 生成结果字符串
    const outStr = numberEntries.map(entry => entry.num).join('');

    // 处理空输入情况(避免原代码的索引错误)
    if (outStr.length === 0) {
        return 0;
    }
    const result = outStr[0] + outStr[outStr.length - 1];
    return parseFloat(result);
}

// 测试用例
console.log(detectNumbers('eightwothree')); // 输出 83
console.log(detectNumbers('twone')); // 输出 21
console.log(detectNumbers('twothree')); // 输出 23
console.log(detectNumbers('a1bthree')); // 输出 13

效果说明

  • 对于eightwothree:正确识别eight(8)、two(2)、three(3),生成823,最终返回83。
  • 对于twone:同时捕获two(2)和one(1),生成21,最终返回21。
  • 对于twothree:正确识别two(2)和three(3),生成23,最终返回23。
  • 混合阿拉伯数字和英文数字词的场景也能按顺序正确提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:48:11