我已(非常)近日得到了函數式編程很感興趣,尤其是,如何將這些應用到我在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