我希望能找到一个变量来获取hubot。 实施例
name = "Peter"
module.exports = (robot) ->
robot.hear /hello name/i, (msg) ->
msg.send "Peter?! No I am Hubot."
我已经尝试过“#{}”语法,如下所示,但无处可去。
name = "Peter"
module.exports = (robot) ->
robot.hear /hello #{name}/i, (msg) ->
msg.send "Peter?! No I am Hubot."
非常感谢任何帮助。
此致
奥斯汀
答案 0 :(得分:3)
由于你的正则表达式不是常数,你应该使用new Regex()
:
使用构造函数提供正则表达式的运行时编译。当您知道正则表达式模式将要更改时,或者您不知道该模式并从其他源(例如用户输入)获取该模式时,请使用构造函数。
<强>代码强>
name = "Peter"
regx = new Regex("hello #{ name }", 'i')
module.exports = (robot) ->
robot.hear regx, (msg) ->
msg.send "Peter?! No I am Hubot."
修改强> 使用名称作为参数
module.exports = (robot, name) ->
regx = new Regex("hello #{ name }", 'i')
robot.hear regx, (msg) ->
msg.send "#{ name }?! No I am Hubot."
答案 1 :(得分:1)
如果它有用,使用javascript而不是coffeescript的hubot示例也会选择该选项并将其放在另一个变量中:
const options = 'now|later|never';
const regexOptions = new RegExp(`starting (${options})`, 'i');
robot.respond(regexOptions, (msg) => {
// this will respond to:
// hubot starting now
// but not to:
// hubot starting notAnOption
const optionChosen = msg.match[1];
msg.send(`option chosen: ${optionChosen}`);
});
当我拥有可以添加或删除名称的动态列表时,我会使用此技术,然后我想在响应中使用它 - 在向命令中使用的列表添加名称时需要快速重新加载hubot当然。