JavaScript如何使用字符串索引字符实现全局正则替换
错误原因
/text[0]/gi属于正则字面量语法,其中的text[0]会被识别为纯文本匹配规则,不会解析为JS变量,因此无法匹配对应字符text[0]/gi会被JS引擎识别为除法运算表达式,等价于(text[0]) / (gi),由于不存在gi变量,因此抛出未定义错误
解决方案
如果需要使用动态变量构造正则,要使用RegExp构造函数实现:第一个参数传入匹配规则的字符串形式,第二个参数传入正则修饰符。
修正后的替换代码
let text = "aAabbbacccaaade"; // 动态构造正则 const charReg = new RegExp(text[0], 'gi'); text = text.replace(charReg, "");
完整功能实现(符合你的原始逻辑)
function countCaseInsensitiveUniqueChars(str) { let count = 0; let processingStr = str; while (processingStr.length) { const currentChar = processingStr[0]; processingStr = processingStr.replace(new RegExp(currentChar, 'gi'), ''); count++; } return count; } // 测试代码 console.log(countCaseInsensitiveUniqueChars("aAabbbacccaaade")); // 输出 5
可选简化方案
可以直接将字符串统一转大小写后用Set去重,一行即可得到结果:
const uniqueCount = new Set("aAabbbacccaaade".toLowerCase()).size; // 输出结果同样为5
内容的提问来源于stack exchange,提问作者Harris Handoko
相关产品推荐
相关产品推荐

