【发布时间】:2016-07-29 23:54:47
【问题描述】:
我正在为 Discord 编写一个机器人,我希望能够检测一个字符串是否包含格式为 :smilie: 的子字符串,例如
“我对这款视频游戏感到非常兴奋!:getin:”。
目前我设置它的方式,如果用户发布单独的消息,即。
我对这款视频游戏感到非常兴奋!
:getin:
我的机器人将使用此算法附加笑脸
case startsWith(message, ":"):
channel.uploadFile("saemotes/"+message+".png");
channel.uploadFile("saemotes/"+message+".gif");
break;
这很好用,但我希望它更优雅。表情的所有图像文件都命名为:smilie_name:.png/.gif,这取决于它是什么,因此基于此,从字符串中提取潜在文件名的最佳正则表达式是什么?我假设它会像
case S(message).match(/\b:smilie_name:\b/) !== null:
smilie_name_parsed_from_regex = <regex_result>;
channel.uploadFile("saemotes/"+<smilie_name_parsed_from_regex>+".png");
channel.uploadFile("saemotes/"+<smilie_name_parsed_from_regex>+".gif");
break;
任何帮助将不胜感激,谢谢!
【问题讨论】:
-
如果您将名称与 jpeg 相关联,您必须从名称列表中实际匹配,而不仅仅是一些随机名称匹配。用所有可用的名称创建一个正则表达式
:(name1|name2|name3|name4|...|nameLast):否则,你会得到一些随机的垃圾。 -
那很好,但是我有超过 1000 张可能匹配的图像,所以在这个规模上这并不完全实用。如果与图像结果不匹配,则不返回任何内容
-
一千多吧?考虑这是一个具有超过 175,000 名称的正则表达式。只需不到 5 个步骤即可找到其中任何一个。不仅实用,而且速度快!使用 RegexFormat 中的 Strings to Regex - Ternary Tool 或给我他们的链接,我会为你制作一个。
标签: javascript regex node.js