diff --git a/core/modules/filters/strings.js b/core/modules/filters/strings.js index a3b95dd9d..d844f7c56 100644 --- a/core/modules/filters/strings.js +++ b/core/modules/filters/strings.js @@ -30,15 +30,11 @@ exports.trim = makeStringBinaryOperator( function(a) {return [$tw.utils.trim(a)];} ); -exports.concat = makeStringBinaryOperator( - function(a,b) {return ["" + a + b];} -); - exports.split = makeStringBinaryOperator( function(a,b) {return ("" + a).split(b).filter(function(str) {return !!str;});} ); -exports.join = makeStringArrayOperator( +exports.join = makeStringReducingOperator( function(accumulator,value,operand) { return "" + (accumulator ? accumulator + (operand || "") + value : value); } @@ -54,7 +50,7 @@ function makeStringBinaryOperator(fnCalc) { }; } -function makeStringArrayOperator(fnCalc,initialValue) { +function makeStringReducingOperator(fnCalc,initialValue) { initialValue = initialValue || ""; return function(source,operator,options) { var result = []; @@ -67,4 +63,15 @@ function makeStringArrayOperator(fnCalc,initialValue) { }; } +exports.splitregexp = function(source,operator,options) { + var result = [], + suffix = operator.suffix || "", + flags = (suffix.indexOf("m") !== -1 ? "m" : "") + (suffix.indexOf("i") !== -1 ? "i" : ""), + regExp = new RegExp(operator.operand || "",flags); + source(function(tiddler,title) { + Array.prototype.push.apply(result,title.split(regExp)); + }); + return result; +}; + })();