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

JavaScript查找字符串中字符a并按规则累加后续数值的实现方法

实现方案与代码调整说明

现有代码问题汇总

  • 变量引用错误:函数入参命名为a,但逻辑中读取了未定义的变量c,会直接触发运行时报错
  • 变量未声明:累加器ac没有使用let声明,会泄漏为全局变量,引发作用域污染
  • 方法语义不符:map是用于生成新数组的迭代方法,纯累加遍历场景用forEach更合适
  • 缺少返回值:函数执行结束后没有返回累加结果,外部无法获取计算值
  • 正则匹配不严谨:原正则没有加边界限制,可能出现3位字符中只有部分是数字就误判的情况

修正后的原生遍历实现

const sol = str => {
  let ac = 0;
  str.split('').forEach((char, index) => {
    if (char === 'a') {
      // 截取a之后的3位字符判断是否符合规则
      const followStr = str.slice(index + 1, index + 4);
      if (/^\d{3}$/.test(followStr)) {
        ac += Number(followStr);
      } else {
        ac += 1;
      }
    }
  });
  return ac;
};

注:正则增加了首尾边界匹配^和$,确保截取的3位字符全部是数字才命中规则,避免部分匹配的逻辑错误

更简洁的全局正则匹配实现

直接通过正则批量匹配所有符合规则的a及后续内容,遍历匹配结果累加即可,性能更高、逻辑更清晰:

const sol = str => {
  let total = 0;
  // 匹配所有a,同时捕获后续的3位数字(如果存在的话)
  const matches = str.matchAll(/a(\d{3})?/g);
  for (const match of matches) {
    total += match[1] ? Number(match[1]) : 1;
  }
  return total;
};

测试示例

比如输入a123~bba,计算逻辑:

  • 第一个a后接123,加123
  • 第二个a后接~,加1
  • 最终结果为124,和预期一致

内容的提问来源于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.06 17:54:04