Hubot没有响应正则表达式变量

时间:2018-04-01 11:12:41

标签: javascript regex coffeescript hubot

我一直在玩Hubot一段时间,实际上已经太长了但我却陷入了匹配阵列中的字符串的困境。 replies是一个包含一些回复的数组。

这样可行:

module.exports = (robot) ->
    robot.hear /seb/i, (msg) ->
    msg.send msg.random replies

然而,这不是:

regex = new RegExp triggers.join(), 'gi'

module.exports = (robot) ->
    robot.hear regex, (msg) ->
    msg.send msg.random replies

regex是由字符串数组的内容组成的字符串。在这种情况下,打印出正则表达式返回"/seb/i"

有人在乎解释吗?我从来不是JavaScript和Coffeescript的忠实粉丝:)

1 个答案:

答案 0 :(得分:1)

Array.prototype.join将字符串参数作为分隔符。如果没有给出参数,则默认为,

假设我们有以下关键字数组:

const triggers = ["kw1", "kw2", "kw3"]

调用triggers.join()将返回字符串kw1,kw2,kw3。将其传递给 RegExp 构造函数将创建 RegExp 对象that matches the exact string kw1,kw2,kw3 (also ignores case because of the i flag)

要将多个关键字与正则表达式匹配,您必须将它们与special-or (|) operator分开。

所以而不是

regex = new RegExp triggers.join(), 'gi'

你应该写

regex = new RegExp triggers.join('|'), 'i'

您可能还想删除g(全局搜索)标记,因为它足以匹配您案例中第一次出现的关键字。