1

我在 botkit 对话中使用正则表达式模式遇到了一个我无法完全解决的问题,虽然我确信其他人会快速回答,但我完全被难住了。

我正在构建一个将用户信息存储在 JSON 文件中的对话,但在存储条目之前我需要对条目进行少量验证。具体来说,输入必须是全名(任何数量大于 1 的单词,它们之间有空格)或格式为 domain\name 且没有空格的域用户名和正确的域。

使用 RegExr,我想出了以下 regEx 表达式,它们在该用户界面中匹配,但在放置在 botkit 对话节点的“模式”属性中时不匹配:

  • \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');
4

1 回答 1

2

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

pattern: '\\w+( +\\w+)+',
pattern: 'domain(\\\\\\w+)+',

第一种模式:

  • \\w+- 1+字字符
  • ( +\\w+)+- 1 个或多个 1 个或多个空格的序列,然后是 1 个或多个单词字符

域正则表达式:

  • domain- 一种domain
  • (\\\\\\w+)+- 1 次或多次出现
    • \\\\- 1 个反斜杠
    • \\w+- 1 个或多个单词字符。
于 2017-10-27T20:39:01.553 回答