Coffeescript正则表达式不符合预期

问题描述 投票:3回答:1

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

因此,第一个选项的输入可以是dvb zellescher wegdvb albertplatz,第二个选项可以是dvb zellescher weg in 5dvb albertplatz in 10。 (“dvb”这里是我的脚本的关键字,“zellescher weg”和“albertplatz”是停止名称的两个例子)

在试图将这些与正则表达式相匹配时,我遇到了一个问题,即我必须在不同的测试站点上工作的正则表达式(如regex101,这似乎是推荐在这里并做JS)在我的代码中不起作用。匹配没有数字的输入的正则表达式是/^dvb (\D*)$/,我使用/dvb\s+(.*)in (\d*)/来匹配用户输入延迟的情况。

我的hubot的最小代码示例由于我不知道的原因而不匹配,如下所示:

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

感谢您的帮助。

javascript regex coffeescript hubot
1个回答
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'"

因此,您需要删除^,或使用不使用任何“智能”正则表达式预处理的.hear方法:

hear: (regex, options, callback) ->
    @listeners.push new TextListener(@, regex, options, callback)
© www.soinside.com 2019 - 2024. All rights reserved.