在Coffeescript中匹配Hubot的名字

时间:2014-11-11 23:18:09

标签: regex coffeescript hubot

我想创建一个Hubot脚本来侦听看起来像这样的字符串:

thanks Hubot

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

robot.hear /thanks hubot/i, (msg) -> 
    ...

但课程名称可能会有所不同,但会包含在robot.name变量中。

问题:如何将机器人名称插入正则表达式? This question似乎表明你可以使用块正则表达式,但我试过了:

robot.hear ///thanks #{robot.name}///i, (msg) ->
    ....

它似乎没有用。

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

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

但这感觉很笨拙,我希望能够将变量插入正则表达式本身。

1 个答案:

答案 0 :(得分:3)

Coffeescript中的///不允许插值,他们使用完全扩展模式,这意味着在这些正则表达式中空白不再重要,即。如果你想匹配一个空格,那么你必须使用像\s

这样的东西

所以试试这个:

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