我一直在玩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的忠实粉丝:)
答案 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
(全局搜索)标记,因为它足以匹配您案例中第一次出现的关键字。