我正在为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;
任何帮助将不胜感激,谢谢!
答案 0 :(得分:1)
看起来像你的正则表达式的一个小改动应该做的伎俩:
case /:([\w]+):/g.test(S(message)) === true:
var images = S(message).match(/:([\w]+):/g);
// map matches into urls and upload
images.map(function(image) {
return 'saemotes/'+image.replace(/:/g, '')+'.png';
}).forEach(channel.uploadFile);
break;
答案 1 :(得分:0)
使用的模式是:
:[A-Za-z]++:
此模式匹配任意一对冒号,其中至少有一个(因此为+)字母字符。第二个加号用于表示+ possesive,这意味着它占用了与popossib一样多的字符,并且在发生故障时不会回溯。这当然不是必要的,但会略微提高性能。