如何查找一个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一样多的字符,不会在失败的情况下回溯。 这当然不是必要的,但略微提高性能。