匹配Json对象中的密码项,并替换为****

433 阅读1分钟

应用场景:需要将Json对象中的密码项,替换为******,可以看到password前面是字符,后面的结构是(”:“密码”),但是冒号之前或者之后很可能存在空字符,因此是查找(password“+空字符+:+空字符+”)之后,(“)之前的字符,就是密码。

{
  "params": {
      "redis.password": "aaaaa",
  }
}

写在前面的正则表达式的知识:

? _________________代表?前面的字符,可有可无,最多一个

* ________________代表*之前的字符,可有可无多了不限

?= ________________exp1(?=exp2) 代表查找exp2之前的exp1

?<= _______________(?<=exp2)exp1 代表查找exp2之后的exp1

?! __________________exp1(?!exp2) 代表查找后面不是exp2的exp1

?<!_________________(?<!exp2)exp1 查找前面不是exp2的exp1

\"___________________转义双引号

:___________________匹配冒号

._____________________一切字符的通配符

[\s]{0,10}____________[\s]空字符一位(空格,tab,......) 加起来就是0到10位空字符

[备选字符列表]______不能加逗号分割,每个[],只能匹配一位字符

正则表达式

var patternStr = /(?<=[Pp]assword\"[\\s]{0,10}:[\\s]{0,10}\").*?(?=\")/gi;
const taskInfo = JSON.stringify(Json对象).replace(
  patternStr,
  '******'
);
this.taskShowDetail = JSON.parse(taskInfo);

查找(password + “ + 0-10位的空字符 + :+ 0-10位的空字符 + ”)后面的 一切字符

(?<=[Pp]assword\"[\\s]{0,10}:[\\s]{0,10}\").*?

查找(“)之前的一切字符

.*?(?=\")

即查找(password + “ + 0-10位的空字符 + :+ 0-10位的空字符 + ”)后面的 、(“)之前的一切字符