Переменная Hubot Hear
Я надеялся найти здесь переменную. бывший
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."
Любая помощь будет принята с благодарностью.
С Уважением,
Остин
2 ответа
Поскольку ваше регулярное выражение не является константой, вы должны использовать 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."
В случае, если это полезно, пример hubot, использующий javascript, а не coffeescript, который также берет выбранную опцию и помещает ее в другую переменную:
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 при добавлении имени в список, используемый в команде, конечно.