如何查找一个string是否包含两个冒号之间的单词,然后返回包含冒号的结果
我正在为Discord编写一个bot,并且希望能够检测到一个string是否包含格式为:smilie:
的子string,例如
“我为这个电子游戏感到非常兴奋!:getin:”。
目前,我已经build立的方式,如果用户发布一个单独的消息,即。
我为这个电子游戏感到非常兴奋!
:进入:
我的机器人将通过使用这个algorithm附加笑脸
case startsWith(message, ":"): channel.uploadFile("saemotes/"+message+".png"); channel.uploadFile("saemotes/"+message+".gif"); break;
这工作正常,但我希望它更优雅。 所有图像文件的表情名为:smilie_name:.png/.gif
取决于它是什么,所以基于此,什么是最好的正则expression式将可能的文件名从string中拉出来? 我假设它会是这样的
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;
任何帮助将不胜感激,谢谢!
似乎对你的正则expression式的一个小的改变应该做的伎俩:
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;
使用的模式是:
:[A-Za-z]++:
这个模式匹配任何一对至less有一个(因此+)字母字符里面的冒号。 第二个加号是用来使+拥有权,这意味着它采取了像popossib一样多的字符,不会在失败的情况下回溯。 这当然不是必要的,但略微提高性能。