2015-07-28 2 views
3

Я пытаюсь написать сценарий hubot, который отвечает на два разных типа ввода. Пользователь может либо ввести имя остановки для локального общественного транспорта, либо, возможно, постфикс с задержкой.Повторное выражение Coffeescript не соответствует

Вход может, следовательно, быть dvb zellescher weg или dvb albertplatz для первого варианта или dvb zellescher weg in 5 или dvb albertplatz in 10 для второго. («dvb» здесь является ключевым словом для моего скрипта и «zellescher weg» и «albertplatz», являющимся двумя примерами для имен стоп)

При попытке сопоставить их с регулярным выражением я столкнулся с проблемой, когда регулярное выражение I «Я получил работу на разных сайтах тестирования (например, regex101, который, как представляется, рекомендуется здесь и делает JS), не будет работать в моем коде. Регулярное выражение для совпадающего ввода без номера /^dvb (\D*)$/, и я использую /dvb\s+(.*)in (\d*)/, чтобы соответствовать случаям, когда пользователь ввел задержку.

Минимальный пример кода для моего hubot, не сопрягая по причинам, без ведома для меня выглядит так:

robot.respond /^dvb (\D*)$/, (res) -> 
    hst = res.match[1] 
    res.send hst 

Спасибо за любую помощь по этому вопросу.

+0

Если вы хотите совместить два регулярных выражения ... '/^dvb \ s + (\ D +) (\ sin \ s \ d + |) $ /' –

ответ

1

Согласно источнику respond code comments:

# Общественный: Добавляет прослушиватель, который пытается соответствовать входящим сообщениям, направленных
# на роботе на основе Regex. Все регулярные выражения лечения паттерны , как они начинают
# с '^'

Регулярное выражение из respond идет в respondPattern, что ускользает ^ и предупреждает против использования якорей:

if re[0] and re[0][0] is '^' 
     @logger.warning \ 
     "Anchors don't work well with respond, perhaps you want to use 'hear'" 

Таким образом, вам необходимо либо удалите еру ^ или используйте метод .hear, который не использует предварительную обработку регулярного выражения «умный»:

hear: (regex, options, callback) -> 
    @listeners.push new TextListener(@, regex, options, callback) 
+1

Ой, вау, вот где проблема? Просто удалил '^' и все, кажется, работает, спасибо! Использование 'listen' также будет работать, но я бы предпочел бы« ответить ». –

Смежные вопросы