如何使用Javascript正则批量脱敏字符串中的多个参数值
问题原因
你当前使用的正则/(.*--user=)(\s*)([^]*)/中,末尾分组[^]*会匹配--user=后的所有剩余字符,替换规则$1XX$2只保留了前两个分组加XX,因此会丢失--host、--database等后续所有内容。
解决代码
你可以通过全局匹配指定参数名的键值对实现多参数脱敏,示例如下:
const originStr = "mysql --user=USER_NAME --host=DB_HOST --database=SCHEMA -p -e 'SELECT"; // 固定脱敏内容,匹配期望输出 const desensitized = originStr.replace(/--(user|host|database)=([^\s]+)/g, (match, key) => { const maskMap = { user: 'XX', host: 'XXXXXX', database: 'XXXX' }; return `--${key}=${maskMap[key]}`; }); console.log(desensitized); // 输出:mysql --user=XX --host=XXXXXX --database=XXXX -p -e 'SELECT
正则说明
/--(user|host|database)=([^\s]+)/g为全局匹配规则- 括号
(user|host|database)匹配需要脱敏的三个参数名 ([^\s]+)匹配参数值(到空白符为止,不会截断后续内容)- 回调函数根据匹配到的参数名返回对应脱敏后的键值对,其余内容全部保留
如果你需要根据原值长度动态生成脱敏字符,只需要修改回调逻辑即可:
const desensitized = originStr.replace(/--(user|host|database)=([^\s]+)/g, (match, key, value) => { return `--${key}=${'X'.repeat(value.length)}`; });
内容的提问来源于stack exchange,提问作者kk.
相关产品推荐
相关产品推荐

