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

如何按所有非数字字符拆分字符串以实现加减计算器功能?

解决方案

1. 拆分字符串

使用正则表达式全局匹配连续数字或指定运算符字母(p/s),可一次性拆分出目标片段:

const s = '10p6s23';
// 匹配一个或多个数字,或单个p/s
const rawParts = s.match(/\d+|[ps]/g);
// 此时rawParts为 ['10', 'p', '6', 's', '23']

2. 转换数据类型与运算符

将字符串数字转为数值类型,同时把p替换为+、s替换为-:

const processedParts = rawParts.map(item => {
  if (item === 'p') return '+';
  if (item === 's') return '-';
  return Number(item);
});
// 此时processedParts为 [10, '+', 6, '-', 23]

3. 计算最终结果

通过循环遍历处理后的数组,依次执行加减运算:

let result = processedParts[0];
for (let i = 1; i < processedParts.length; i += 2) {
  const operator = processedParts[i];
  const num = processedParts[i + 1];
  switch(operator) {
    case '+':
      result += num;
      break;
    case '-':
      result -= num;
      break;
  }
}
console.log(`${processedParts.join(' ')} = ${result}`); // 输出 "10 + 6 - 23 = -7"

完整可复用代码

const calculate = (str) => {
  const rawParts = str.match(/\d+|[ps]/g);
  if (!rawParts) return 0; // 处理空输入或无效格式
  
  const processedParts = rawParts.map(item => {
    if (item === 'p') return '+';
    if (item === 's') return '-';
    return Number(item);
  });

  let result = processedParts[0];
  for (let i = 1; i < processedParts.length; i += 2) {
    const operator = processedParts[i];
    const num = processedParts[i + 1];
    operator === '+' ? result += num : result -= num;
  }
  
  console.log(`${processedParts.join(' ')} = ${result}`);
  return result;
};

// 测试
calculate('10p6s23'); // 输出 "10 + 6 - 23 = -7",返回-7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:31:01