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

如何在JS中用正则表达式提取tg-emoji标签内的表情符号

用JavaScript正则提取标签内的表情符号

完全可以通过JavaScript正则表达式实现需求,以下是具体操作方法:

核心思路

通过正则匹配<tg-emoji>标签的结构,忽略不同的emoji-id属性值,捕获标签内部的表情符号内容。

正则表达式说明

使用带Unicode模式的正则来精准匹配表情:

/<tg-emoji\s+emoji-id="[^"]+">([\p{Emoji}]+)<\/tg-emoji>/gu

各部分作用:

  • <tg-emoji\s+emoji-id="[^"]+">:匹配<tg-emoji起始标签,兼容任意emoji-id属性值([^"]+匹配非双引号的所有字符)
  • ([\p{Emoji}]+):捕获组,匹配一个或多个表情符号(\p{Emoji}是Unicode属性转义,支持所有标准表情,包括带肤色修饰的变体)
  • <\/tg-emoji>:匹配闭合标签
  • g:全局模式,匹配所有符合的标签
  • u:启用Unicode模式,支持\p{Emoji}这类Unicode属性匹配

代码示例

场景1:提取所有表情符号

const rawStr = '<tg-emoji emoji-id="5818665600624365278">⏺</tg-emoji><tg-emoji emoji-id="123456">😊</tg-emoji><tg-emoji emoji-id="987654">👍🏻</tg-emoji>';

// 提取所有表情
const emojiList = rawStr.match(/<tg-emoji\s+emoji-id="[^"]+">([\p{Emoji}]+)<\/tg-emoji>/gu)?.map(item => {
  const match = item.match(/<tg-emoji\s+emoji-id="[^"]+">([\p{Emoji}]+)<\/tg-emoji>/u);
  return match ? match[1] : '';
}).filter(Boolean);

console.log(emojiList); // 输出 ["⏺", "😊", "👍🏻"]

场景2:替换原字符串,仅保留表情符号

const rawStr = '这是一段带表情的文本<tg-emoji emoji-id="5818665600624365278">⏺</tg-emoji>,还有另一个<tg-emoji emoji-id="789012">🎉</tg-emoji>';

// 替换标签为表情
const resultStr = rawStr.replace(/<tg-emoji\s+emoji-id="[^"]+">([\p{Emoji}]+)<\/tg-emoji>/gu, '$1');

console.log(resultStr); // 输出 "这是一段带表情的文本⏺,还有另一个🎉"

场景3:处理转义后的标签(如示例中的HTML实体)

如果原始字符串中的标签是HTML转义后的(比如&lt;tg-emoji...&gt;),需要先还原实体再提取:

const escapedStr = '<p><code>&lt;tg-emoji emoji-id=&quot;5818665600624365278&quot;&gt;⏺&lt;/tg-emoji&gt;</code></p>';

// 还原HTML实体
const unescapedStr = escapedStr.replace(/&lt;/g, '<')
                               .replace(/&gt;/g, '>')
                               .replace(/&quot;/g, '"');

// 提取表情
const targetEmoji = unescapedStr.match(/<tg-emoji\s+emoji-id="[^"]+">([\p{Emoji}]+)<\/tg-emoji>/u)?.[1];

console.log(targetEmoji); // 输出 "⏺"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:31:00