首页 > 解决方案 > 无法将重复次数添加到 RegExp JS

问题描述

我已经编写了使用 RegExp 计算可重复符号最大子字符串长度的代码。为了完成,我需要在构造函数中包含重复次数:

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



let lenghtsArrays = [];
for (let element of uniqueChars) {
  const regExp = new RegExp(`${element}{2,}`, "g"); // Something wrong here!!!
  lenghtsArrays.push(word.match(regExp).length);


}
console.log(lenghtsArrays);

function getMaxOfArray(numArray) {
  return Math.max.apply(null, numArray);
}
console.log(getMaxOfArray(lenghtsArrays));

我应该如何正确地写出这一行?提前致谢!

标签: javascriptarraysregexsorting

解决方案


您的代码在遇到h. word由于RegExp 模式没有任何匹配项/h{2,}/g,因此String.prototype.match()返回null. null没有length属性,这就是您看到此错误的原因。

您可以简单地通过生成word.match(regExp) 可选链式 ( ?.)的结果来解决这个问题,这将优雅地处理这种情况(尽管返回undefined而不是数值):

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

let lenghtsArrays = [];
for (let element of uniqueChars) {
  const regExp = new RegExp(`${element}{2,}`, "g"); // Something wrong here!!!
  lenghtsArrays.push(word.match(regExp)?.length);
}
console.log(lenghtsArrays);

function getMaxOfArray(numArray) {
  return Math.max.apply(null, numArray);
}
console.log(getMaxOfArray(lenghtsArrays));

更进一步,在这些情况下,您可以使用nullish 合并运算符 ( ??)返回值:0

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

let lenghtsArrays = [];
for (let element of uniqueChars) {
  const regExp = new RegExp(`${element}{2,}`, "g"); // Something wrong here!!!
  lenghtsArrays.push(word.match(regExp)?.length ?? 0);
}
console.log(lenghtsArrays);

function getMaxOfArray(numArray) {
  return Math.max.apply(null, numArray);
}
console.log(getMaxOfArray(lenghtsArrays));


推荐阅读