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

JS中RegExp构造函数无法正确设置重复匹配次数如何解决

问题原因

你标注的正则构造行存在的核心问题是没有对正则元字符做转义:如果待匹配的字符是.、*、+、?、^、$、|、\、(、)、[、]、{、}这类正则特殊字符时,拼接后生成的正则会完全不符合预期,匹配逻辑直接出错。

另外你当前代码还存在两个隐含问题:

  • 当某个字符不存在连续2次以上的匹配时,word.match(regExp)会返回null,直接调用.length会抛出类型错误
  • 你现在往数组里push的是匹配到的连续子串的个数,不是每个连续子串的长度,完全不符合你计算最长连续子串长度的需求

修正方案

第一步:新增正则特殊字符转义方法

function escapeRegExp(char) {
  return char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

第二步:修正正则构造行及后续匹配逻辑

你标注的代码行需要增加转义处理,修正后写法如下:

const regExp = new RegExp(`${escapeRegExp(element)}{2,}`, "g");

完整可运行代码:

const word = "fkffhjhlkjhkjhkjhqqqhqkqkqkhk";
const toCharWord = Array.from(word);
const uniqueChars = new Set(toCharWord);
console.log(uniqueChars);

function escapeRegExp(char) {
  return char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

let maxLength = 0;
for (let element of uniqueChars) {
  // 修正后的正则构造行
  const regExp = new RegExp(`${escapeRegExp(element)}{2,}`, "g");
  const matchResult = word.match(regExp);
  if (matchResult) {
    matchResult.forEach(str => {
      if (str.length > maxLength) maxLength = str.length;
    })
  }
}
console.log(maxLength); // 示例字符串输出结果为3,对应连续出现3次的q

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:06:04