首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在字符串中替换肤色变体表情包?

如何在字符串中替换肤色变体表情包?
EN

Stack Overflow用户
提问于 2021-06-26 05:24:18
回答 3查看 105关注 0票数 0

如何将表情符号的变体替换为其他字符?

例如,?????????应生成xxxxxx,其中x是替换字符。请注意,每个表情符号都应该替换为一个x

不起作用的是:

代码语言:javascript
复制
const regex = new RegExp('[?????????]', 'igu');
const s = '?????????';
const m = s.match(regex); // ["?","?","?","?","?","?","?","?","?"]
const r = s.replace(regex, 'x'); // xxxxxxxxx

上面有9个匹配项,显然分别匹配/替换了一些代理。

为什么会这样呢?

EN

回答 3

Stack Overflow用户

发布于 2021-06-26 05:34:26

您可以按长度降序对emoji进行排序,然后使用RegExp构造函数动态构建正则表达式:

代码语言:javascript
复制
const arr = ['?','??','?','??','?','??'];
arr.sort((a, b) => b.length - a.length);
const regex = new RegExp(arr.join('|'), 'g');
const s = '?????????';
const m = s.match(regex);
console.log(m); // => ["?", "??", "?", "??", "?", "??"]
const r = s.replace(regex, 'x');
console.log(r); // => xxxxxx

票数 1
EN

Stack Overflow用户

发布于 2021-06-26 05:42:35

表情符号很复杂,每个基本符号(“表示”)后面都有一系列“修饰符”,这些修饰符为符号提供了额外的样式。如果你想知道所有的细节,请查看UTS 51 (你不想)。

在这种情况下,您必须匹配/替换表示符号,后跟一些修饰符,以使其作为完整的符号工作:

代码语言:javascript
复制
const s = '?????????';

const regex = /\p{Emoji_Presentation}\p{Emoji_Modifier}*/gu;

const m = s.match(regex);
console.log(...m, m.length) // 6

const r = s.replace(regex, 'x'); 
console.log(r, r.length) // 6

票数 1
EN

Stack Overflow用户

发布于 2021-06-26 05:46:19

我遇到了这种定义基本字符并添加可选修饰符的方法:

代码语言:javascript
复制
const regex = new RegExp('[???]??', 'gu');

const s = '?????????';
const m = s.match(regex);
const r = s.replace(regex, 'x');

这类似于georg's answer。这里的优点是,它允许指定要匹配的特定肤色,因此正则表达式可以更细粒度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68137190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档