Coffeescript正则表达式不符合预期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Coffeescript正则表达式不符合预期相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

感谢您的帮助。

答案

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

以上是关于Coffeescript正则表达式不符合预期的主要内容,如果未能解决你的问题,请参考以下文章

在coffeescript正则表达式中应该如何转义双引号?

NSpredicate 上的正则表达式未按预期工作

在coffeescript / javascript [复制]中使用正则表达式中的字符串中的'+'加号

字符串应用,expect预期交互,数组,正则表达式

正则表达式不像预期的那么贪婪 /^(\d+)[^_]/

js正则表达式小结