如何在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转义后的(比如<tg-emoji...>),需要先还原实体再提取:
const escapedStr = '<p><code><tg-emoji emoji-id="5818665600624365278">⏺</tg-emoji></code></p>'; // 还原HTML实体 const unescapedStr = escapedStr.replace(/</g, '<') .replace(/>/g, '>') .replace(/"/g, '"'); // 提取表情 const targetEmoji = unescapedStr.match(/<tg-emoji\s+emoji-id="[^"]+">([\p{Emoji}]+)<\/tg-emoji>/u)?.[1]; console.log(targetEmoji); // 输出 "⏺"
内容的提问来源于stack exchange,提问作者PC Tea
相关产品推荐
相关产品推荐

