Как принять несколько вейлов из метода Botkit слышит?

1

Код:

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

Как изменить код так, чтобы поле значения принимало только число, так что квадратный метр переходит в поле источника

Теги:
botkit

1 ответ

1
Лучший ответ

Вы можете использовать

map (\d+) (.*) into (.*)

См. Демо-версию regex

Первая группа захвата теперь (\d+) и будет захватывать только 1 или более цифр.

Вы также можете сопоставлять пробелы 1+ между значениями, используя \s+ (так что также будут сопоставлены вкладки и другие пробелы, 1 или более случаев):

map\s+(\d+)\s+(.*?)\s+into\s+(.*)

См. Эту демо-версию regex.

подробности

  • map - подстрока map
  • \s+ - пробелы 1+
  • (\d+) - Группа 1: одна или несколько цифр
  • \s+
  • (.*?) - Группа 2: любые символы 0+, отличные от символов разрыва строки, как можно меньше,
  • \s+ - пробелы 1+
  • into - into подстроку
  • \s+ - пробелы 1+
  • (.*) - Группа 3: любые символы 0+, отличные от символов прерывания строки, как можно больше.
  • 1
    Огромное спасибо Wiktor Stribizew после того, как посмотрел на (\ d +), я был похож на то, как я скучал по этой вещи .. Спасибо за помощь мне ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню