【问题标题】:Coffeescript regex not matching as intendedCoffeescript 正则表达式与预期不匹配
【发布时间】:2015-10-18 16:26:30
【问题描述】:

我正在尝试编写一个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

感谢您对此的任何帮助。

【问题讨论】:

  • 如果你想结合这两个正则表达式.../^dvb\s+(\D+)(\sin\s\d+|)$/

标签: javascript regex coffeescript hubot


【解决方案1】:

据来源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)

【讨论】:

  • 哇哦,问题出在哪里?刚刚删除了^,一切似乎都在工作,谢谢!使用hear 也可以,但我更愿意使用respond
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多