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的忠实粉丝:(

Array.prototype.join将字符串参数作为隔离器。当不给出参数时,它默认为,

让我们假设我们有以下关键字:

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

调用triggers.join()将返回字符串kw1,kw2,kw3。将其传递到 REGEXP 构造函数将创建 REGEXP 匹配精确字符串kw1,kw2,kw3的对象(也忽略了i flag的情况(。

(。 (。

要将多个关键字与正则匹配匹配,必须用Special-Or(|(操作员将它们分开。

所以而不是

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

你应该写

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

您可能还需要删除g(全局搜索(标志,因为它足以匹配您的情况下的第一次出现关键字。

最新更新