regex 总览待审核
Basic_Emoji · VS · Join_Control

Basic_Emoji、变体选择符与 ZWJ

Basic_Emoji 是不依赖复杂组合机制(Join_Control、国旗区域码、Tag)的基础 emoji 集合: 要么是单码点 emoji(😀),要么是单码点 + VS16。先认全两个关键的「不可见」字符—— 变体选择符Join_Control,它们是后面所有 emoji 序列的零件。

变体选择符:同一个码点,文本脸还是 emoji 脸

很多符号早于 emoji 存在(♥ ☀ ✌…)。U+FE0F(VS16)强制 emoji 展示, U+FE0E(VS15)强制文本展示。挑一个看三种形态:

现代新增的 emoji(😀🚀🧩)默认就是 emoji 展示,不需要 VS16。VS16 主要用来「唤醒」那些 历史上是文本符号的码点。\p{Basic_Emoji} 收的是「emoji 脸」的那一形态。

Join_Control:只有两个字符

\p{Join_Control} 是个只含两个码点的属性:ZWNJ 阻止连写、ZWJ 把前后粘成一个。 它们都零宽不可见,却是 emoji 拼装的「胶水」。

ZWJ 序列:用胶水把多个 emoji 粘成一个

把若干 emoji 用 ZWJ 串起来,支持的平台会渲染成一个合成字形: 👨 + ZWJ + 👩 + ZWJ + 👧 = 👨‍👩‍👧。输入一个看它怎么拆:

code point 拆解(ZWJ / VS 高亮)

串起来看:👨‍👩‍👧 这种是 ZWJ 序列,🏳️‍🌈 = 🏳 + VS16 + ZWJ + 🌈。它们已超出 Basic_Emoji, 属于 RGI 那页讲的 \p{RGI_Emoji} 大家族。