javascript - Hubot 不响应正则表达式变量

标签 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 的忠实粉丝:)

最佳答案

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(全局搜索)标志,因为它足以匹配在您的情况下第一次出现的关键字。

关于javascript - Hubot 不响应正则表达式变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49597441/

相关文章:

javascript - Transmission.js 嵌套普通值

javascript - 用C#重写部分javascript

javascript - 如何有效地编辑数据集深处的项目,显示为 react 组件?

javascript - jQuery 在 div 中显示数组

javascript - 使用 RegEx trim 文件名

regex - 可变数量的捕获组

javascript - Node.js JSON.parse 关于对象创建与使用 getter 属性

javascript - 如何使用 jQuery $(this) 更改使用 "onclick"事件的元素的 HTML?

javascript - 网页中内容的优先级,并将一个元素放在另一个元素之前

coffeescript - 使用 Meteor >0.6.0 和 CoffeeScript 的全局类