Coffeescript正则表达式与预期不匹配

时间:2015-07-28 08:14:13

标签: javascript regex coffeescript hubot

我正在尝试编写一个回复两种不同输入的hubot脚本。用户可以输入本地公共传输的停止名称,也可以选择后缀延迟。

因此,对于第一个选项,输入可以是dvb zellescher wegdvb albertplatz,对于第二个选项,输入可以是dvb zellescher weg in 5dvb 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

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:2)

根据来源respond code comments

  

#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)
相关问题