【问题标题】:How to find if a string contains a word between two colons, then return that result including the colons如何查找字符串是否包含两个冒号之间的单词,然后返回包含冒号的结果
【发布时间】:2016-07-29 23:54:47
【问题描述】:

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

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

【问题讨论】:

  • 如果您将名称与 jpeg 相关联,您必须从名称列表中实际匹配,而不仅仅是一些随机名称匹配。用所有可用的名称创建一个正则表达式 :(name1|name2|name3|name4|...|nameLast): 否则,你会得到一些随机的垃圾。
  • 那很好,但是我有超过 1000 张可能匹配的图像,所以在这个规模上这并不完全实用。如果与图像结果不匹配,则不返回任何内容
  • 一千多吧?考虑这是一个具有超过 175,000 名称的正则表达式。只需不到 5 个步骤即可找到其中任何一个。不仅实用,而且速度快!使用 RegexFormat 中的 Strings to Regex - Ternary Tool 或给我他们的链接,我会为你制作一个。

标签: javascript regex node.js


【解决方案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;

【讨论】:

  • 太好了,很高兴为您提供帮助! :D
【解决方案2】:

要使用的模式是:

:[A-Za-z]++:

此模式匹配任何一对包含至少一个(因此是+)字母字符的冒号。第二个加号用于使 + 具有所有权,这意味着它占用与 popossib 一样多的字符,并且在失败的情况下不会回溯。这当然不是必需的,但会稍微提高性能。

【讨论】:

  • 我将如何返回这个结果,而不是仅仅检查它当前是否存在以便我可以在算法中使用它?
  • 使用string.match(),您可以获得与给定模式匹配的字符串数组。
  • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性 cmets 挤满你的代码,因为这会降低代码和解释的可读性!
猜你喜欢
  • 1970-01-01
  • 2013-04-28
  • 2015-09-09
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 2020-02-24
相关资源
最近更新 更多