如何移除字符串中不在指定对象内的所有表情符号?
实现JavaScript表情过滤函数:保留指定允许的表情
需求:移除字符串中所有不在allowedEmojis对象内的表情符号,非表情字符全部保留,仅保留对象中包含的表情。
完整实现代码
let allowedEmojis = { '😀': 50, '😂': 150, '🥳': 500 }; function filterEmojis(str) { // 将允许的表情转为Set,提升查找效率 const allowedEmojisSet = new Set(Object.keys(allowedEmojis)); // 拆分字符串为单个Unicode字符(兼容多码点表情) return Array.from(str).filter(char => { // 保留规则:允许的表情 或 非表情字符 return allowedEmojisSet.has(char) || !/[\p{Emoji}]/u.test(char); }).join(''); } let str = "Helloo 😀😂🥳😡"; str = filterEmojis(str); console.log(str); // 输出:Helloo 😀😂🥳
关键实现说明
- Set优化查找:把允许的表情存入
Set,比直接使用对象属性查找更高效,尤其适合大量表情的场景 - Unicode字符拆分:使用
Array.from(str)确保正确拆分包含复杂表情(如代理对字符)的字符串,避免拆分错误 - 表情判断逻辑:通过Unicode属性正则
/[\p{Emoji}]/u准确识别表情字符,该正则支持ES2018及以上环境 - 过滤规则:仅移除「不在允许列表中的表情」,所有非表情字符不受影响
内容的提问来源于stack exchange,提问作者Troxi
相关产品推荐
相关产品推荐

