Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何查找字符串是否包含两个冒号之间的单词,然后返回包含冒号的结果_Javascript_Regex_Node.js - Fatal编程技术网

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

Javascript 如何查找字符串是否包含两个冒号之间的单词,然后返回包含冒号的结果,javascript,regex,node.js,Javascript,Regex,Node.js,我正在为Discord编写一个bot,我希望能够检测字符串是否包含子字符串,例如,其格式为:smilie: “我对这个电子游戏感到非常兴奋!” 目前我的设置方式是,如果用户发布单独的消息,即 我对这个电子游戏非常兴奋 :getin: 我的机器人将使用此算法附加smilie case startsWith(message, ":"): channel.uploadFile("saemotes/"+message+".png"); channel.uploadFile("saemot

我正在为Discord编写一个bot,我希望能够检测字符串是否包含子字符串,例如,其格式为
:smilie:

“我对这个电子游戏感到非常兴奋!”

目前我的设置方式是,如果用户发布单独的消息,即

我对这个电子游戏非常兴奋

:getin:

我的机器人将使用此算法附加smilie

case startsWith(message, ":"):
    channel.uploadFile("saemotes/"+message+".png");
    channel.uploadFile("saemotes/"+message+".gif");
break;
这很好,但我希望它更优雅。emotes的所有图像文件都被命名为
: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;
case S(message).match(/\b:smilie\u name:\b/)!=无效的:
smilie_name_从_regex=解析_;
上传文件(“saemotes/”++“.png”);
上传文件(“saemotes/”++“.gif”);
打破
任何帮助都将不胜感激,谢谢

要使用的模式是:

:[A-Za-z]++:

此模式匹配任何一对冒号,其中至少包含一个(因此是+)字母字符。第二个加号用于使+具有所有格,这意味着它使用的字符数与popossib的字符数相同,并且在失败时不会回溯。这当然不是必需的,但会略微提高性能。

似乎对正则表达式进行一个小改动就可以做到这一点:

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;

我如何返回这个结果,而不只是检查它是否当前存在,以便在算法中使用它?使用它,您可以获得与给定模式匹配的字符串数组。虽然这个代码片段可以解决这个问题,但确实有助于提高您的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满您的代码,因为这会降低代码和解释的可读性!太好了,很乐意帮忙DIf如果要将一个名称与jpeg关联,则必须从名称列表中进行匹配,而不仅仅是一些随机名称匹配。制作一个包含所有可用名称的正则表达式
:(name1 | name2 | name3 | name4 | | | nameLast):
否则,你会得到一些随机垃圾。这很好,但是我有1000多个图像可以与之匹配,所以在这种规模下,这不太实际。如果它与图像结果不匹配,它将不返回任何结果,是吗?将此视为具有名称的正则表达式。找到它们中的任何一个只需不到5个步骤。不仅实用,而且快得吓人!!使用来自或给我一个链接到他们,我会为你做一个。