如何查找字符串是否包含两个冒号之间的单词,然后返回包含冒号的结果

时间:2016-07-29 23:54:48

标签: javascript regex node.js

我正在为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;

任何帮助将不胜感激,谢谢!

2 个答案:

答案 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一样多的字符,并且在发生故障时不会回溯。这当然不是必要的,但会略微提高性能。