正则表达式匹配元音不在不和谐表情符号中的单词

Regex to match words which have vowels which are not in a discord emoji

我正在制作一个 discord 机器人,它会删除所有包含元音的消息(我知道这很奇怪,但这只是我和朋友之间的一个玩笑)。我检查消息是否有元音的方法是使用正则表达式,我正在尝试改进我的正则表达式,以便它允许表情符号(它们的名称可能包含元音)。

我需要正则表达式做的是匹配其中包含元音的任何字符串,例如:

"example" //should match

除了它不能匹配这样的字符串(这是我的机器人看到表情符号的方式),不管它是否有元音。类似于:

"<:example:760518199699308544>" //shouldnt match

匹配其中包含元音的任何单词很容易:

/\w*[aeiou]\w*/gi

或者匹配任何表情符号很容易:

/<:\w*:\d{18}>/gi

但我一直在弄乱正负 lookahead/lookbehind 试图将这两者合并大约一个小时,但似乎无法解决。如果你知道我在这里需要做什么,请帮忙!

如果您只是确保单词前面有空格(或行首)怎么办?

(?:^|\s)\w*?[aeiou]\w*

与测试表情符号中始终存在的内容相反,您可以测试其中从未包含的内容。

Demo

假设您使用的是支持环视的正则表达式方言,请检查该词前面是否没有紧跟 <:

/(?<!<:)\b\w*[aeiou]\w*/gi

尾随的 \w* 在这里是不必要的,但我保留了它,以防您出于某种原因想要匹配整个单词。