我正在尝试编写一个 hubot 脚本来响应两种不同类型的输入。用户可以输入本地公共(public)交通站点的名称,也可以选择在后缀上加上延迟。
因此,第一个选项的输入可以是 dvb zellescher weg
或 dvb albertplatz
或 dvb zellescher weg in 5
或 dvb albertplatz 在 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
感谢您对此的任何帮助。
最佳答案
# 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
的正则表达式转到 respondPattern
转义 ^
并警告不要使用 anchor :
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)
关于javascript - Coffeescript 正则表达式未按预期匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31670820/