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

JS正则校验矩阵方程非法字符 末条测试用例失效如何修复

问题原因&解决方案

你遇到的问题由两个错误共同导致:

1. 正则带g全局修饰符导致匹配异常

带g修饰符的正则实例会内置lastIndex属性记录上次匹配的结束位置,每次调用test()/exec()都会从上次结束的位置继续匹配,循环调用时就会出现结果错乱的问题。regex101平台每次测试都是重新初始化正则实例,所以不会触发这个问题。

2. 测试用例的反斜杠没有转义

JS字符串里单个反斜杠是转义符,你写的"A\B"实际会被JS解析为"AB",反斜杠直接被吞掉了,自然检测不到非法字符。

修改方法

  1. 删掉正则里的g修饰符,你只需要判断是否存在非法字符,不需要全局匹配
  2. 测试用例里的反斜杠要写成双反斜杠转义,即"A\\B"
    修改后的完整代码如下:
// 去掉g修饰符即可
let invalidCharRGX = /[^a-z0-9\.\+\-\*\^\(\)]/i;
let strArr = [
  "A+B-C", //1 预期返回false
  "(A+B)-C", //2 预期返回false
  "A^+B^-C", //3 预期返回false
  "A*B-C", //4 预期返回false
  "2.5A+C", // 5 预期返回false
  "A=B", //6 预期返回true
  "[A-B]", //7 预期返回true
  "A&B", //8 预期返回true
  "A\\B" //9 转义反斜杠,预期返回true
];
strArr.forEach((word, index) => {
    console.log(invalidCharRGX.test(word), 
                word.match(invalidCharRGX), 
                index + 1
               );
})

运行后所有用例都会符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:45:04