先核同一正则实例是否带g或y,以及lastIndex是否被上一轮匹配改变。按浏览器 API 文档的说明,带 g 或 y 标志的同一个 RegExp 实例会维护 lastIndex 状态:exec 匹配成功会把 lastIndex 更新到匹配结束位置,匹配失败会把它清零,test 同样会影响这个值。反复调用时结果变化,可能原因是这个状态在调用之间被带进了下一次匹配。

这个判断有明确适用条件,并不是所有正则都如此。只有带 g 或 y 标志、并且确实是同一个 RegExp 实例时,lastIndex 才会作为下一次匹配的起点参与。若每次调用都新建实例,或标志里没有 g、y,就不应把 lastIndex 当作结果变化的原因。还要区分 g 与 y:y 要求从 lastIndex 指定位置严格匹配,不会另找后续位置;g 会从该位置继续向后找。两者行为不同,排查时不能混用结论。
可操作的观察信息是:先确认调用的是不是同一对象引用,记录 pattern 与 flags,再在每次 test 或 exec 前后打印 lastIndex 和返回值。若看到成功一次后 lastIndex 变为非零、下一次从该位置继续、失败后又归零,基本可以把现象收敛到状态延续,而不是输入数据坏了。若 lastIndex 始终不变,或对象每次都是新的,则应转向输入类型、字符串转换、正则写法等方向另查,不硬套本结论。
风险在于处理方式。若为了“让结果稳定”直接改业务规则、把匹配失败吞掉,可能掩盖真实的校验失败;若在共享实例上随手清零,又可能让并发或异步调用互相干扰。共享同一个带状态的正则对象,在多次调用、回调或异步流程里尤其要谨慎。
下一步建议做独立校验:在隔离脚本里复现同一实例、同一输入和同一 flags 的调用序列,逐次记录 lastIndex。维护者可按需求在每次匹配前把 lastIndex 重置为 0,或按调用边界换用新实例;若业务本身不需要跨次状态,可另评估无状态匹配方式。无论选哪种,都不应通过改业务规则吞掉失败。
婺城区台式电脑用户可拨400-877-9605,先整理同一实例的flags和lastIndex调用序列,不直接放宽业务匹配规则。电脑快修网提供信息展示与第三方维修对接,具体地址、电脑侧检查是否支持及安排需当次核实,启用范围不代表即时履约。