首页 > 解决方案 > 所有 Discord 标记类型的正则表达式模式

问题描述

做一些 discord.js 机器人开发,我正在尝试创建一个正则表达式,它将过滤掉所有类型的不和谐标签(又名标记的用户和自定义表情)。我尝试了一些不同的东西,但没有一个能捕捉到每一个案例。标签的5种主要样式是:

<@108012418998792192> (User)
<@!420279649055145996> (User)
<:oof:463391326491377674> (Emote without number in name)
<:Tyler1:311344841466576896> (Emote with number in name)
<:1234:123412314353463456> (Emote that just has number in name)

我遇到的主要问题之一是标签类型的多样性。如果您注意到一个用户有一段@!时间,另一个用户刚@开始有一段时间。表情是一个完全不同的故事:ALPHA_NUMERIC:

这个机器人过滤了很多消息,所以我试图让它尽可能高效和紧凑。

我试过做类似的事情

arg.replace(/<\D+\d+>/g, '').trim();
arg.replace(/<\D+\w+>/g, '').trim();

但它无法过滤掉最后 2 个。

标签: javascriptregexdiscord.js

解决方案


看起来像(regexr.com 链接)

<((@!?\d+)|(:.+?:\d+))>

应该做的伎俩。


推荐阅读