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

JavaScript自定义Desen脚本正则与运算逻辑异常修复求助

问题诊断与修复方案

猜测验证

你的猜测完全正确,同时还存在其他语法、逻辑错误,具体错误如下:

具体错误原因

  • 正则全局匹配逻辑错误:check函数使用g标记的正则匹配整个输入字符串中所有对应字符加数字的组合,不是仅匹配当前位置后续的单个数字段,例如输入a13xna2x时调用check(code, 'a')会同时匹配a13和a2,返回累加值15,而非当前位置的13,导致数值累加完全不符合预期。
  • check函数表达式错误:eval拼接的表达式逻辑错误,处理b时生成的表达式为A - +C,返回值为所有匹配数字的累计负值,而调用处处理b时又使用了AC -= check(...),相当于AC = AC - (-数字和),变成了加对应数字,完全和预期的减法相反,这就是b97测试用例返回97而非-97的直接原因。
  • 语法错误:b的判断分支结束多写了一个闭合大括号},导致n、g、x的判断逻辑完全不在遍历回调的作用域内,重置、转字符、输出逻辑全部失效,这是n重置无效的核心原因。
  • 未跳过已处理的数字字符:处理完带数字的a/b后没有跳过后续的数字字符,后续遍历到数字字符时会执行无匹配逻辑,存在运行隐患。
  • 变量未声明:AC、String_、ans均未加声明关键字,会隐式挂载为全局变量,存在变量污染风险。

修复方案

核心优化思路

抛弃全局匹配的check函数,遍历过程中直接读取当前位置后续的连续数字,处理完后跳过数字段避免重复处理。

修复后代码

const Desen = code => {
    let AC = 0; // 累计值
    let String_ = '';
    let ans = "";
    const len = code.length;
    let i = 0;
    while (i < len) {
        const char = code[i];
        if (char === 'a') {
            let numStr = '';
            let j = i + 1;
            // 读取后续连续数字
            while (j < len && /\d/.test(code[j])) {
                numStr += code[j];
                j++;
            }
            if (numStr) {
                AC += Number(numStr);
                i = j; // 跳过已处理的数字
            } else {
                AC += 1;
                i++;
            }
        } else if (char === 'b') {
            let numStr = '';
            let j = i + 1;
            while (j < len && /\d/.test(code[j])) {
                numStr += code[j];
                j++;
            }
            if (numStr) {
                AC -= Number(numStr);
                i = j;
            } else {
                AC -= 1;
                i++;
            }
        } else if (char === 'n') {
            AC = 0;
            i++;
        } else if (char === 'g') {
            String_ += String.fromCharCode(AC);
            i++;
        } else if (char === 'x') {
            ans += code[i-1] === 'g' ? (String_ + (String_ = '')) : AC;
            i++;
        } else {
            // 其他字符直接跳过
            i++;
        }
    }
    return ans;
}

测试用例验证

console.log(Desen("aaa13x")) // 输出15,符合预期
console.log(Desen("a13xna2x")) // 输出"132",符合预期
console.log(Desen("a97gxa2")) // 输出"a",符合预期
console.log(Desen("b97xa2")) // 输出-97,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:54:03