## Posted By

mejamiewilson on 08/19/11

# Supplanting Data with Equations

/ Published in: JavaScript

`String.prototype.supplant = function (o) {            return this.replace(/{([^{}]*)}/g,                function (a, b) {                     //Evaluators                    var ev = {                        _Object: /([^\[\]]*)\[([^\[\]]*)\]/g,                        _Equation: /([^\=\!\?]*)([\=\!\?]*)([^\?\:]*)([\?\:]*)([^\?\:]*)([\?\:]*)([^\?\:]*)/g                    };                     //Test if it's an equation - A==B?this:that                    var _1 = b.indexOf('?');                     if (_1 !== -1) {                         var ci = null;                        b.replace(ev._Equation, function (x, y, z, xx, yy, zz, xxx, yyy, zzz) {                            //Seems to fire twice, yet to work that out                            if (x == "") return;                             //A==B?this:that would create                            //equation  = {                            //    l: "A",      left                            //    r: "B",      right                            //    s: "this",   success                            //    f: "that"    fail                            //}                            var equation = {                                l: y.replace(ev._Object, function (x, y, z) {                                    return o[y][z]                                }) || y,                                r: (z != '?') ? xx : null,                                s: (z != '?') ? zz : xx,                                f: (z != '?') ? yyy : zz                            },                            evald = null;                             if (z != '?') {                                evald = eval(equation.l + z + equation.r);                            } else {                                evald = o[equation.l];                            }                             if (evald == true)                                ci = equation.s;                            if (evald == false)                                ci = equation.f;                         });                        return ci;                     } else {                        var r = o[b];                        return typeof r === 'string' ? r : a;                    }                 }            );        };`