2

我想创建一个 Hubot 脚本来侦听如下所示的字符串:

thanks Hubot

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

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

但是名称当然可以有所不同,尽管包含在robot.name变量中。

问题:如何将机器人的名称插入到正则表达式中? 这个问题似乎表明您可以只使用块正则表达式,但我尝试过:

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

它似乎没有用。

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

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

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

4

1 回答 1

3

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

所以试试这个:

robot.hear /// thanks \s+ #{robot.name} ///i
于 2014-11-11T23:26:42.213 回答