使用正则表达式进行掩蔽处理

问题描述

我将用正则表达式来掩盖单词。

检测结果如下。

regex: (?<=.{2}).*(?=.{3})
word : AABBCCC
Result : BB

使用如下代码正常运行如下图

word.match(new RegExp(regex,'gi')).forEach(v => {
    word = word.replace(v,'*'.repeat(v.length));
});

结果:AA**CCC

但是如果单词是 BBBBCCC,则结果是 **BBCCC 我要BB**CCC,怎样才能得到我想要的结果?

解决方法

在 foreach 中,您正在替换单词 BB 中的匹配项 v(在变量 BBBBCCC 中),它将替换 BB 的第一次出现,给出**BBCCC

它适用于 AABBCCC 的第一个示例,因为 BB 是要替换的字符串中唯一出现的地方。

你可以做的是在replace的回调中使用匹配。

let word = "BBBBCCC";
const regex = /(?<=.{2}).+(?=.{3})/;
console.log(word.replace(regex,v => '*'.repeat(v.length)))