我想创建一个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()
....
但这感觉很笨拙,我希望能够将变量插入正则表达式本身。
答案 0 :(得分:3)
Coffeescript中的///
不允许插值,他们使用完全扩展模式,这意味着在这些正则表达式中空白不再重要,即。如果你想匹配一个空格,那么你必须使用像\s
所以试试这个:
robot.hear /// thanks \s+ #{robot.name} ///i