我已(非常)近日得到了函数式编程很感兴趣,尤其是,如何将这些应用到我在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