You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中如何通过正则保留单词首字符 其余字符替换为星号

问题原因

当前代码里的正则r'\S'会匹配所有非空白字符,替换时会把全部字母都换成*,因此输出全掩码的**** ***,没有保留每个单词的首字符。

修复方案

调整正则规则,只匹配每个单词里除首字母外的其余字符替换为*即可。使用正向零宽后行断言编写正则:RegExp(r'(?<=\S)\S')
规则逻辑:

  • (?<=\S)是零宽校验位,要求当前匹配位置的前一个字符必须是非空白字符
  • 后面的\S是实际匹配替换的目标,也就是每个单词从第二个字符开始的所有字母,替换后正好保留首字母,其余字符对应替换为*
调整后可直接运行的代码
void main() {
  String txt = 'John Doe';
  String hideStr = txt.replaceAll(RegExp(r'(?<=\S)\S'), '*');
  print(hideStr); 
  // 运行输出: J*** D**
}
可选扩展实现

如果需要固定掩码长度(不随原单词长度变化星号数量),可以拆分单词后单独处理再拼接,示例代码:

void main() {
  String txt = 'John Doe';
  String hideStr = txt.split(' ').map((word) {
    // 空字符串或单字符单词直接返回
    if (word.length <= 1) return word;
    // 保留首字母,后面拼接固定长度掩码
    return word[0] + '***';
  }).join(' ');
  print(hideStr);
  // 运行输出: J*** D***
}

内容的提问来源于stack exchange,提问作者Nazarudin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 08:31:21