如何按所有非数字字符拆分字符串以实现加减计算器功能?
解决方案
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
相关产品推荐
相关产品推荐

