Regex 对话中使用正则表达式模式的Slack Botkit

Regex 对话中使用正则表达式模式的Slack Botkit,regex,slack,botkit,Regex,Slack,Botkit,我在botkit对话中遇到了一个使用regex模式的问题,我不能完全解决这个问题,尽管我相信其他人会很快得到答案,但我完全被难住了 我正在构建一个将用户信息存储在JSON文件中的对话,但在存储条目之前,我需要对条目进行少量验证。具体地说,输入必须是全名(任何字数大于一个字数之间有空格的字数)或域名格式的域用户名(不带空格)和正确的域 使用RegExr,我得到了以下regEx表达式,这些表达式在该用户界面中匹配,但在放置到botkit会话节点的“pattern”属性中时将不匹配: \w+(++\

我在botkit对话中遇到了一个使用regex模式的问题,我不能完全解决这个问题,尽管我相信其他人会很快得到答案,但我完全被难住了

我正在构建一个将用户信息存储在JSON文件中的对话,但在存储条目之前,我需要对条目进行少量验证。具体地说,输入必须是全名(任何字数大于一个字数之间有空格的字数)或域名格式的域用户名(不带空格)和正确的域

使用RegExr,我得到了以下regEx表达式,这些表达式在该用户界面中匹配,但在放置到botkit会话节点的“pattern”属性中时将不匹配:

  • \w+(++\w+)
    用于任意数量的单词,单词之间有空格
  • domain+(\\+\w+)
    用于指定的域+用户名
但当我在botkit对话中使用这些时,它们并不匹配——所以我不太清楚我做错了什么

下面是使用这些代码的代码段:

bot.startConversation(message, function (err, convo) {
    convo.say("I don't know who you are in TFS. Can you tell me?");
    convo.addQuestion("You can say \"no\" or tell me your TFS name or your domain name (eg: \"domain\\username)", [
        {
            pattern: bot.utterances.no,
            callback: function (response, convo) {
                convo.say("Okay, maybe another time then.");
                convo.next();
            }
        },
        {
                pattern: '\w+( +\w+)+',
                callback: function (response, convo) {
                convo.say("You said your TFS name is " + response.text);
                convo.next();
            }
        },
        {
            pattern: 'domain+(\\+\w+)+',
            callback: function (response, convo) {
                convo.say("You said your TFS name is " + response.text);
                convo.next();
            }
        },
        {
            default: true,
            callback: function (response, convo) {
                convo.say("I didn't understand that.");
                convo.repeat();
                convo.next();
            } 
        }   
    ], {}, 'default');

您需要使用双反斜杠,并在第一个正则表达式字符串文字中的结束单引号之前修复反斜杠:

pattern: '\\w+( +\\w+)+',
pattern: 'domain(\\\\\\w+)+',
第一种模式:

  • \\w+
    -1+字字符
  • (++\\w+++
    -1个或多个空格序列,然后是1个或多个单词字符
域正则表达式:

  • -a
  • (\w+)+
    -1次或多次出现
    • \\\
      -1反斜杠
    • \\w+
      -1个或多个单词字符

您不一致地使用反斜杠。请尝试
pattern:'\w+(++\w+),
pattern:'\\w+(++\\w+),
对不起,w pattern中多余的反斜杠是来自RegExr的副本中的打字错误。在我现在的代码中,它确实是读
\w+(++\w+)
。我会试试另一个建议,看看是否有效。是的,第二个建议解决了它。谢谢你的帮助。嗯……它对单词边界有帮助,但对域验证没有帮助。有什么想法吗?我尝试了
模式:'k2workflow+(\\+\\w+),
但没有成功。完成!谢谢你的帮助!刚意识到botkit在有空格的情况下匹配域名,经过多次迭代,还没有弄清楚,想知道你是否有任何指针。我拼凑在一起并在别处测试的正则表达式是
^(domain\\\(\\w+\\S*$)
,它在正则表达式上运行良好(与“domain\foo bar”不匹配,但与domain\foo匹配),但当响应中包含空格(我想抛出一个错误)时,它仍在botkit中匹配。如有任何帮助,将不胜感激。@ctgilley The
^(domain\\\(\\w+\\S*$)
模式无法匹配空格,因为
^
匹配字符串的开头,
domain
匹配文字字符串,然后匹配反斜杠,然后匹配1个或多个单词字符,然后0+非空白字符直到字符串的结尾(
$
)。该问题似乎与正则表达式无关,但与字符串在传递到正则表达式引擎之前的处理方式有关。谢谢,我实际上认为这是我所使用的匹配序列,我需要防止第一次匹配(word+“”+word+“”+word)从包含域名和反斜杠开始,我认为另一个可以排除匹配。呃,我讨厌正则表达式。:)我通过更改操作顺序并确保我的单词match regex中有一个字符串开头
^\\w+(++\\w+)
。这似乎给这个单词的棺材钉上了一颗钉子。