我想创建一个 Hubot 脚本来监听如下字符串:
thanks Hubot
其中 Hubot
是机器人名称。如果我们假设机器人总是被命名为 hubot
,那么它就很简单了:
robot.hear /thanks hubot/i, (msg) ->
...
但是名称当然可以变化,尽管包含在 robot.name
变量中。
问题:如何将机器人的名称插入到正则表达式中? This question似乎表明您可以只使用 block 正则表达式,但我尝试过:
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
关于regex - 在 Coffeescript 中匹配 Hubot 的名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26876442/