我正在尝试编写一个回复两种不同输入的hubot脚本。用户可以输入本地公共传输的停止名称,也可以选择后缀延迟。
因此,对于第一个选项,输入可以是dvb zellescher weg
或dvb albertplatz
,对于第二个选项,输入可以是dvb zellescher weg in 5
或dvb albertplatz in 10
。
(" dvb"这里是我的脚本的关键字" zellescher weg"" albertplatz"是停止名称的两个例子)
试图将这些与正则表达式相匹配时,我遇到了一个问题,即我在不同的测试网站上工作的正则表达式(如regex101,这似乎是推荐在这里并做JS)赢得了#39 ; t在我的代码中工作。匹配输入而没有数字的正则表达式为/^dvb (\D*)$/
,我使用/dvb\s+(.*)in (\d*)/
来匹配用户输入延迟的情况。
我的hubot的一个最小代码示例,由于我不知道的原因而无法匹配,如下所示:
robot.respond /^dvb (\D*)$/, (res) ->
hst = res.match[1]
res.send hst
感谢您提供任何帮助。
答案 0 :(得分:2)
#Public:添加一个尝试匹配传入消息的侦听器 指导
#在机器人的基础上使用正则表达式。 所有正则表达式都会对待模式 就像他们开始一样#'^'
来自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'"
因此,您需要删除^
,或使用不使用任何" smart"的.hear
方法。正则表达式预处理:
hear: (regex, options, callback) ->
@listeners.push new TextListener(@, regex, options, callback)