如何通过正则表达式对西里尔字母单词的中间字符进行有效脱敏?
- 内容介绍
- 文章标签
- 相关推荐
本文共计825个文字,预计阅读时间需要4分钟。
相关专题:
本文介绍一种精准匹配俄文单词(含大小写及ё/Ё)中除首尾外所有字母的正则表达式方案,适用于敏感词过滤场景,配合 `string.replaceall()` 实现如“ОченьПлохоеСлово” → “О**************о”的自动星号脱敏。
在实现俄语敏感词过滤(如 swearword censoring)时,常见需求是保留单词首尾字母以维持可读性或上下文识别,同时将中间所有字符替换为星号 *。由于 JavaScript(及多数主流语言)中的 \w 默认仅匹配 ASCII 字母、数字和下划线,不包含西里尔字母,因此 /\B\w\B/g 等依赖 Unicode 类别或词边界(\b/\B)的模式在俄文文本中会失效。
正确的解决方案是使用环视断言(lookaround assertions)构建位置匹配逻辑:
- (?<=[а-яА-ЯёЁ]):正向后瞻(positive lookbehind),确保当前字符前面是一个西里尔字母;
- [а-яА-ЯёЁ]:匹配一个西里尔字母(覆盖小写 а–я、大写 А–Я,以及带分音符的 ё 和 Ё);
- (?=[а-яА-ЯёЁ]):正向前瞻(positive lookahead),确保当前字符后面也是一个西里尔字母。
三者组合 (?<=[а-яА-ЯёЁ])[а-яА-ЯёЁ](?=[а-яА-ЯёЁ]) 即精确匹配「位于两个西里尔字母之间的任意西里尔字母」——这天然排除了单词首字符(无前导西里尔字母)和末字符(无后续西里尔字母),完美满足需求。
本文共计825个文字,预计阅读时间需要4分钟。
相关专题:
本文介绍一种精准匹配俄文单词(含大小写及ё/Ё)中除首尾外所有字母的正则表达式方案,适用于敏感词过滤场景,配合 `string.replaceall()` 实现如“ОченьПлохоеСлово” → “О**************о”的自动星号脱敏。
在实现俄语敏感词过滤(如 swearword censoring)时,常见需求是保留单词首尾字母以维持可读性或上下文识别,同时将中间所有字符替换为星号 *。由于 JavaScript(及多数主流语言)中的 \w 默认仅匹配 ASCII 字母、数字和下划线,不包含西里尔字母,因此 /\B\w\B/g 等依赖 Unicode 类别或词边界(\b/\B)的模式在俄文文本中会失效。
正确的解决方案是使用环视断言(lookaround assertions)构建位置匹配逻辑:
- (?<=[а-яА-ЯёЁ]):正向后瞻(positive lookbehind),确保当前字符前面是一个西里尔字母;
- [а-яА-ЯёЁ]:匹配一个西里尔字母(覆盖小写 а–я、大写 А–Я,以及带分音符的 ё 和 Ё);
- (?=[а-яА-ЯёЁ]):正向前瞻(positive lookahead),确保当前字符后面也是一个西里尔字母。
三者组合 (?<=[а-яА-ЯёЁ])[а-яА-ЯёЁ](?=[а-яА-ЯёЁ]) 即精确匹配「位于两个西里尔字母之间的任意西里尔字母」——这天然排除了单词首字符(无前导西里尔字母)和末字符(无后续西里尔字母),完美满足需求。

