我在botkit对话中使用正则表达式模式遇到了一个我无法解决的问题,虽然我确信其他人会有快速回答,但我完全被难倒了。
我正在构建一个将用户信息存储在JSON文件中的对话,但在存储之前我需要对这些条目进行少量验证。具体来说,输入必须是全名(任意数量的单词大于1,并且它们之间有空格)或域名用户名,格式为domain \ name,没有空格和正确的域。
使用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');
答案 0 :(得分:2)
您需要使用双反斜杠,并在第一个正则表达式字符串文字中的结束单引号之前修复反斜杠:
pattern: '\\w+( +\\w+)+',
pattern: 'domain(\\\\\\w+)+',
第一种模式:
\\w+
- 1 + word chars ( +\\w+)+
- 包含1个或多个空格的1个或多个序列,然后是1个或多个字符域正则表达式:
domain
- domain
(\\\\\\w+)+
- 一次或多次出现
\\\\
- 1反斜杠\\w+
- 一个或多个单词字符。