javascript - 无法将重复次数添加到 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));
我应该如何正确地写出这一行?提前致谢!
解决方案
您的代码在遇到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));
推荐阅读
- asp.net-mvc - 如何添加具有需要由 Autofac 解决的依赖项的自定义 ModelMetadataDetailsProvider?
- python-3.x - 尝试使用 Pywinauto 向应用程序发送文本时出错:AttributeError
- ios - CollectionViewCells 中的重复表视图
- linux - 用新行替换逗号但保留第一列
- python - 熊猫:在一列数组上的`array_split`,为什么我找不到该列的最大值
- java - boyer moore 算法:使用 java 使其更高效
- java - createCameraPreviewSession:Surface 没有有效的本机窗口 - 第二次创建时出错
- kentico - 带有 HTML 代码的 Kentico 电子邮件模板宏
- java - 归档的Java方法
- sql - 自引用表上的合并约束错误