如何从 Botkit hears 方法中接受多个值?
How to accept multiple vales from Botkit hears method?
代码:
controller.hears([map (.*) (.*) into (.*)){
var value = message.match[1];
var source = message.match[2];
var dest = message.match[3]; }
当输入为 map 12 grams to kilograms
时,它工作正常,但当输入为 map 12 square meter into square centimeter
时,输出为
value = 12 square, source= meter and dest = square centimeter
如何修改代码,使值字段只接受数字,以便平方米转到源字段
您可以使用
map (\d+) (.*) into (.*)
第一个捕获组现在是 (\d+)
,只会捕获一个或多个数字。
您还可以使用 \s+
在值之间匹配 1+ 个空格(因此,制表符和其他空格也将被匹配,出现 1 次或多次):
map\s+(\d+)\s+(.*?)\s+into\s+(.*)
参见 this regex demo。
详情
map
- map
子串
\s+
- 1+ 个空格
(\d+)
- 第 1 组:一个或多个数字
- \s+
(.*?)
- 第 2 组:除换行字符外的任何 0+ 个字符,尽可能少,
\s+
- 1+ 个空格
into
- into
子字符串
\s+
- 1+ 个空格
(.*)
- 第 3 组:除换行字符外的任何 0+ 个字符,尽可能多。
代码:
controller.hears([map (.*) (.*) into (.*)){
var value = message.match[1];
var source = message.match[2];
var dest = message.match[3]; }
当输入为 map 12 grams to kilograms
时,它工作正常,但当输入为 map 12 square meter into square centimeter
时,输出为
value = 12 square, source= meter and dest = square centimeter
如何修改代码,使值字段只接受数字,以便平方米转到源字段
您可以使用
map (\d+) (.*) into (.*)
第一个捕获组现在是 (\d+)
,只会捕获一个或多个数字。
您还可以使用 \s+
在值之间匹配 1+ 个空格(因此,制表符和其他空格也将被匹配,出现 1 次或多次):
map\s+(\d+)\s+(.*?)\s+into\s+(.*)
参见 this regex demo。
详情
map
-map
子串\s+
- 1+ 个空格(\d+)
- 第 1 组:一个或多个数字- \s+
(.*?)
- 第 2 组:除换行字符外的任何 0+ 个字符,尽可能少,\s+
- 1+ 个空格into
-into
子字符串\s+
- 1+ 个空格(.*)
- 第 3 组:除换行字符外的任何 0+ 个字符,尽可能多。