Недавно я очень заинтересовался функциональным программированием и, в частности, как применить его к моей работе в JavaScript. После ответа на вопрос, касающийся использования регулярных выражений (ссылка here), я продолжал разрабатывать идеи немного больше, имея целью использовать это для сравнения с функциональным программным подходом.Преобразование решения Javascript для подхода к функциональному программированию
Задача состоит в том, чтобы написать простой парсер ввода, который принимает регулярное выражение и некоторый ввод и возвращает соответствующий массив объектов (это шаг 1 большего решения, но я хотел начать просто). Я работаю с более традиционным подходом, но хотел бы сделать эквивалент с функциональным программированием (я использую ramda.js, но открыт для любого функционального программирования, если он есть в JavaScript).
Вот рабочий код:
var parseInput = function (re, input) {
var results = [], result;
while ((result = re.exec(input)) !== null) {
results.push({
startPos: result.index,
endPos: re.lastIndex - 1,
matchStr: result[1]
})
}
return results;
};
var re = /<%([^%>]+)%>/g;
var input = "A <%test.child%><%more%> name: <%name%> age: <%age%> EOD";
var results = parseInput(re, input);
console.log(results);
Выход я получаю выглядит следующим образом:
[ { startPos: 2, endPos: 15, matchStr: 'test.child' },
{ startPos: 16, endPos: 23, matchStr: 'more' },
{ startPos: 31, endPos: 38, matchStr: 'name' },
{ startPos: 45, endPos: 51, matchStr: 'age' } ]
что структура и результаты, которые я ищу.
В частности, я экспериментировал с Ramda и функцией match(), но я не вижу чистого способа получить массив объектов, которые я ищу (не дожидаясь соответствия match() получить массив совпадений, а затем посмотреть каждый из них в исходном входе, который кажется не менее громоздким, чем мое текущее решение).
Руководство будет оценено по достоинству.
Спасибо Скотту. Это именно то, что я искал! Я задал этот вопрос, потому что не мог найти способ удалить зависимость от состояния регулярных выражений. Ваше решение обеспечивает это. Мне нравится разделение форматирования данных, и комментарии к карри также были полезными. – rasmeister