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

如何使用JavaScript正则保留数字、数学运算符等运算字符

JavaScript结合正则实现混杂文本运算表达式清洗

实现思路

核心逻辑不需要复杂语法解析,按规则过滤+格式规范化即可实现,天然支持括号嵌套要求:

  • 第一步:设置字符白名单,所有不在白名单内的无关字符直接过滤
  • 第二步:清理冗余空格,可选做乘号统一、括号层级校验
    白名单保留字符范围:
  • 数字0-9
  • 运算符:+、-、*、/,以及乘法的x/X写法
  • 特殊符号:$、.、(、)、半角空格

核心实现代码

function cleanMathExpression(input) {
  // 过滤所有不在白名单内的字符
  let output = input.replace(/[^0-9+\-xX*\/$.()\s]/g, '');
  // 合并连续空格为单个,去除首尾空格
  output = output.replace(/\s+/g, ' ').trim();
  // 可选:统一乘号格式,将作为运算符的x/X替换为*,避免孤立x残留
  output = output.replace(/(?<=[\d$)])\s*[xX]\s*(?=[\d$(])/g, '*');

  // 可选:括号嵌套层级校验,默认限制最多2层
  let currentDepth = 0;
  let maxDepth = 0;
  for (const c of output) {
    if (c === '(') {
      currentDepth++;
      maxDepth = Math.max(maxDepth, currentDepth);
    }
    if (c === ')') currentDepth--;
    if (currentDepth < 0) break; // 右括号多于左括号时可按需做错误处理
  }
  if (maxDepth > 2) console.warn('表达式括号嵌套超过2层,请核对输入');

  return output;
}

效果测试

传入示例输入运行:

const testInput = '((5 dogs + 2 cats) * $3.00 per animal) + $20 flat fee';
console.log(cleanMathExpression(testInput));
// 运行输出:((5 + 2) * $3.00) + $20

注:你给出的目标输出开头遗漏了一个左括号,上述输出括号和输入完全匹配,左右括号数量对齐,表达式语法合法。

嵌套支持说明

字符过滤逻辑不会修改括号的位置和数量,天然支持任意层级的括号嵌套,上述代码中的层级校验为可选逻辑,不需要可以直接删除,无论是单层还是多层括号嵌套都可以正常处理。

内容的提问来源于stack exchange,提问作者Alan M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:27:35