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

如何在JavaScript中用lastIndexOf匹配多个运算符获取最后出现位置

问题原因

原来的写法result.lastIndexOf('+' || '-' || '/' || '*')中,||是逻辑或运算符,会直接返回第一个真值,四个运算符都是非空字符串,所以整个判断永远只会返回'+',相当于仅查找最后一个加号的位置,自然无法匹配其他运算符。

修复方案

方案1:分别计算各运算符的最后下标,取最大值

// 分别获取四个运算符的最后出现位置,无匹配时返回-1
const lastPlus = result.lastIndexOf('+')
const lastMinus = result.lastIndexOf('-')
const lastMultiply = result.lastIndexOf('*')
const lastDivide = result.lastIndexOf('/')
// 取最大值即为最后出现的运算符位置
const lastOperatorIndex = Math.max(lastPlus, lastMinus, lastMultiply, lastDivide)

// 注意includes的第二个参数要从运算符的下一位开始查找,避免统计运算符前的小数点
if (val === "." && result.includes('.', lastOperatorIndex + 1)) {
  setResult(result)
}

方案2:用正则直接匹配最后一个运算符的位置

// 正则匹配最后一个四则运算符,无匹配返回-1
const lastOperatorIndex = result.search(/[+\-*/](?=[^+\-*/]*$/)
if (val === "." && result.includes('.', lastOperatorIndex + 1)) {
  setResult(result)
}

边界兼容说明

两种方案都自动兼容无运算符的场景:如果表达式还没有任何运算符,lastOperatorIndex会返回-1,lastOperatorIndex + 1为0,相当于从整个表达式开头查找小数点,刚好符合「第一段数字不能有多个小数点」的需求,不需要额外做特殊判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:06:04