如何用正则捕获JSON列表中Token值以实现Flink日志脱敏
解决方案
要实现对tokenList数组中每个Token的单独脱敏,你需要让正则全局匹配数组内的每个Token字符串,并将每个Token的内容作为独立捕获组,这样脱敏工具就能逐个处理每个Token的前x个字符。
正则表达式(针对无转义双引号的Token)
(?<="tokenList":\s*\[(?:[^[\]]*?))"([^"]+)"(?=(?:[^[\]]*?)\])
开启全局匹配(g标志),这个正则会:
- 仅在
"tokenList": [...]的数组范围内匹配 - 捕获每个被双引号包裹的Token内容到捕获组1
- 自动适配数组内任意数量的Token
脱敏效果验证
当x=3时,原JSON:
{"tokenType":"email","tokenList":["token1","token2","token3","token4"]}
经过工具处理后,每个捕获组的前3个字符会被替换为***,得到:
{"tokenType":"email","tokenList":["***en1","***en2","***en3","***en4"]}
特殊情况处理(Token含转义双引号)
如果你的Token可能包含转义双引号(如"tok\"en1"),请使用以下正则:
(?<="tokenList":\s*\[(?:[^[\]]*?))"((?:\\.|[^"\\])+)"(?=(?:[^[\]]*?)\])
关键逻辑说明
- 正向预查
(?<="tokenList":\s*\[(?:[^[\]]*?))和(?=(?:[^[\]]*?)\])确保只处理tokenList数组内的内容,避免误脱敏其他字段(如tokenType的值) - 全局匹配模式会遍历数组内所有Token,每个Token的内容都作为独立捕获组被工具处理
内容的提问来源于stack exchange,提问作者Vaibhav Kumar
相关产品推荐
相关产品推荐

