regex - 在 Coffeescript 中匹配 Hubot 的名字

标签 regex coffeescript hubot

我想创建一个 Hubot 脚本来监听如下字符串:

thanks Hubot

其中 Hubot 是机器人名称。如果我们假设机器人总是被命名为 hubot,那么它就很简单了:

robot.hear /thanks hubot/i, (msg) -> 
    ...

但是名称当然可以变化,尽管包含在 robot.name 变量中。

问题:如何将机器人的名称插入到正则表达式中? This question似乎表明您可以只使用 block 正则表达式,但我尝试过:

robot.hear ///thanks #{robot.name}///i, (msg) ->
    ....

而且它似乎不起作用。

编辑:我有一个解决方法,我可以提取第二个单词并与机器人的名称进行比较,如下所示:

  robot.hear /thanks (.*)/i, (msg) ->
    name = msg.match[1]
    if name.toLowerCase() is robot.name.toLowerCase()
      ....

但这感觉相当困惑,我希望能够将变量插入到正则表达式本身中。

最佳答案

Coffeescript 中的 /// 不仅允许插值,它们还采用完全扩展模式,这意味着空格在这些正则表达式中不再重要,即。如果你想匹配空格那么你必须使用类似 \s

所以试试这个:

robot.hear /// thanks \s+ #{robot.name} ///i

关于regex - 在 Coffeescript 中匹配 Hubot 的名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26876442/

相关文章:

javascript - 找到 CoffeeScript 行

html - Hubot 可以向 Hipchat 发送 HTML 或其他类型的格式化消息吗?

linux - Hubot 设置不正确 : "hubot-redis-brain: using default redis..."

node.js - 在ubuntu上安装hubot时出错

c# - 快速正则表达式在我的代码中引入 C# 6 的名称 of(x) 而不是字符串文字

javascript - 将特定的 JS Regex 捕获组存储在数组中?

jquery - 如何以编程方式构造对象数组

python - 使用正则表达式匹配 HTML 中的一对注释

javascript - 正则表达式:向字边界添加加号

javascript - netbeans ide coffeescript 将 utf-8 bom 添加到输出文件