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

Kil*_*ian 5 javascript regex coffeescript hubot

我正在尝试编写一个hubot脚本来回答两种不同的输入。用户可以输入当地公共交通工具的站点名称,也可以选择后缀一下。

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

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

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

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

感谢您对此的任何帮助。

Wik*_*żew 4

根据源码respond注释

# 公共:添加一个监听器,尝试
根据正则表达式匹配指向机器人的传入消息。所有正则表达式都将模式视为
以 #开头'^'

正则表达式 fromrespond转义并警告不要使用锚点:respondPattern^

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

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

hear: (regex, options, callback) ->
    @listeners.push new TextListener(@, regex, options, callback)
Run Code Online (Sandbox Code Playgroud)

  • 哦哦哦,原来问题出在这里?刚刚删除了“^”,一切似乎都正常,谢谢!使用“hear”也可以,但我宁愿使用“respond”。 (2认同)