Javascript 如何查找字符串是否包含两个冒号之间的单词,然后返回包含冒号的结果
我正在为Discord编写一个bot,我希望能够检测字符串是否包含子字符串,例如,其格式为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
: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个步骤。不仅实用,而且快得吓人!!使用来自或给我一个链接到他们,我会为你做一个。