Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
Regex 匹配Hubot';咖啡脚本中的名字_Regex_Coffeescript_Hubot - Fatal编程技术网

Regex 匹配Hubot';咖啡脚本中的名字

Regex 匹配Hubot';咖啡脚本中的名字,regex,coffeescript,hubot,Regex,Coffeescript,Hubot,我想创建一个Hubot脚本,用于侦听以下字符串: thanks Hubot 其中Hubot是机器人程序的名称。如果我们假设bot总是被命名为hubot,那么它就微不足道了: robot.hear /thanks hubot/i, (msg) -> ... 但是名称当然可以不同,尽管包含在robot.name变量中 问题:如何在正则表达式中插入bot的名称?似乎表明您可以只使用块正则表达式,但我尝试了: robot.hear ///thanks #{robot.name}///

我想创建一个Hubot脚本,用于侦听以下字符串:

thanks Hubot
其中
Hubot
是机器人程序的名称。如果我们假设bot总是被命名为
hubot
,那么它就微不足道了:

robot.hear /thanks hubot/i, (msg) -> 
    ...
但是名称当然可以不同,尽管包含在
robot.name
变量中

问题:如何在正则表达式中插入bot的名称?似乎表明您可以只使用块正则表达式,但我尝试了:

robot.hear ///thanks #{robot.name}///i, (msg) ->
    ....
但它似乎不起作用

编辑:我有一个变通方法,我可以提取第二个单词并与机器人的名称进行比较,如下所示:

  robot.hear /thanks (.*)/i, (msg) ->
    name = msg.match[1]
    if name.toLowerCase() is robot.name.toLowerCase()
      ....

但这感觉相当困难,我希望能够将一个变量插入正则表达式本身。

Coffeescript中的
//
不仅允许插值,还采用了完全扩展模式,这意味着这些正则表达式中的空格不再重要,例如,如果要匹配空格,则必须使用类似
\s

所以试试这个:

robot.hear /// thanks \s+ #{robot.name} ///i

我们的hubot有这样一个脚本:由于
robot.hear///Thank\s+#{robot.name}///i,(msg)->
,出现了什么错误?你链接到了与你所说的不同的东西。@Sukima:很好!非常喜欢添加表情符号,所以我将使用您的脚本。