如何从字符串中提取数字与计算运算符得到纯运算表达式
实现方案
核心思路
不需要正向匹配要提取的内容做拼接,直接通过反向匹配过滤掉所有非计算相关的字符即可,正则实现逻辑最简单,性能也足够。
具体正则规则
使用全局替换模式,匹配所有不属于保留范围的字符,替换为空字符串即可:
- 正则表达式:
/[^\d+\-*/().]/g - 规则说明:
- 方括号内的
^表示取反,即匹配所有不在枚举范围内的字符 - 保留范围包含:
\d(0-9所有数字)、+-*/四则运算符、()括号、.(小数分隔符) - 末尾的
g修饰符表示全局匹配,会替换字符串中所有符合条件的字符
- 方括号内的
- 如果后续需要保留其他计算运算符(比如取模
%、幂运算^),直接把对应符号加入方括号的保留枚举列表即可。
代码示例(JavaScript)
const inputStr = "1m-2m+(2.2*3mm)"; const outputStr = inputStr.replace(/[^\d+\-*/().]/g, ""); console.log(outputStr); // 输出结果:1-2+(2.2*3)
适配说明
- 该方案可以自动过滤任意非保留字符,不管是m、mm这类字母单位,还是中文单位、特殊标记,都不需要单独写匹配规则
- 如果输入包含全角运算符/全角数字,建议先做全角转半角的预处理,再执行正则替换,避免漏匹配。
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

