Coffeescript 正则表达式未按预期匹配

Coffeescript regex not matching as intended

我正在尝试编写一个 hubot 脚本来响应两种不同类型的输入。用户可以输入本地 public 交通站点的名称,也可以选择在后缀上加上延迟。

因此,第一个选项的输入可以是 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

感谢您对此的任何帮助。

根据消息来源respond code comments

# Public: Adds a Listener that attempts to match incoming messages directed
# at the robot based on a Regex. All regexes treat patterns like they begin
# with a '^'

来自 respond goes to 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)