You need to enable JavaScript to run this app. 如何替换字符串中包含肤色变体的emoji为指定字符
优惠活动
大模型
产品
解决方案
定价
更多

如何替换字符串中包含肤色变体的emoji为指定字符

问题原因

你写的正则会匹配到9个项,核心原因有两个:

  1. 带肤色的emoji本质是由基础人形emoji + 肤色修饰符码点(🏽对应U+1F3FD) 组成的多码点Unicode序列,不是单个码点字符
  2. 正则的字符类[]只能匹配单个Unicode码点,你把所有emoji直接放到字符类里,等价于把所有用到的独立码点都列进了匹配列表,会自动拆分多码点emoji分别匹配。你示例里的6个emoji总共包含9个独立码点(3个无肤色的各占1个,3个带肤色的各占2个),所以最终替换得到9个x。
正确实现方案

要把每个完整的emoji序列作为独立匹配项,注意要把更长的带修饰符的emoji放在正则匹配项的前面,避免先匹配到基础emoji导致长序列被拆分:

// 带肤色的长序列放前面,避免短匹配提前截断
const regex = /👨🏽|🧑🏽|👩🏽|👨|🧑|👩/gu;
const s = '👨👨🏽🧑🧑🏽👩👩🏽';
const m = s.match(regex); // ["👨","👨🏽","🧑","🧑🏽","👩","👩🏽"]
const r = s.replace(regex, 'x'); // "xxxxxx"

如果需要批量匹配所有人形+肤色的组合,可以用Unicode属性匹配的写法,兼容性支持ES2018+的运行环境:

// 匹配所有emoji基础字符 + 可选的肤色修饰符
const regex = /[\p{Emoji_Modifier_Base}\p{Emoji}][\p{Emoji_Modifier}]?/gu;
const s = '👨👨🏽🧑🧑🏽👩👩🏽';
const r = s.replace(regex, 'x'); // "xxxxxx"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 07:06:11