Код:
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+)
и будет захватывать только 1 или более цифр.
Вы также можете сопоставлять пробелы 1+ между значениями, используя \s+
(так что также будут сопоставлены вкладки и другие пробелы, 1 или более случаев):
map\s+(\d+)\s+(.*?)\s+into\s+(.*)
подробности
map
- подстрока map
\s+
- пробелы 1+(\d+)
- Группа 1: одна или несколько цифр(.*?)
- Группа 2: любые символы 0+, отличные от символов разрыва строки, как можно меньше,\s+
- пробелы 1+into
- into
подстроку\s+
- пробелы 1+(.*)
- Группа 3: любые символы 0+, отличные от символов прерывания строки, как можно больше.