要执行字符串,搜索和替换功能,执行功能

时间:2014-08-22 14:43:29

标签: javascript jquery regex json eval

我正在尝试做一些疯狂的事情,我有一个JSON对象,我的网站有各种各样的规则。我有一个系统设置,我可以编写伪代码,然后将其转换为实际代码。我有这个完美的字符串工作,但现在我需要能够传递函数,并替换函数内部的伪代码,然后执行函数。

我认为我在正确的轨道上,但是当我将一个函数转换为字符串时,它只会将函数的输出转换为字符串。

这是我的JSON(部分内容)

customValidation: {
    //compare: "(<!this!> && <!PrimeTimeDiscount!> == 200) || (<!PrimeTimeDiscount!> == 100)",

    compare: function(){

            return new Validator()["date"]("<!this!>", 50);                                             
    },
    overrideDefault: true
}

注释掉的“比较”是我如何将此系统用于常规字符串。

以下是我处理将"<!this!>""<!*!>"转换为JSON对象的值的方法。它基本上是相同的代码两次,但下面的代码我已经开始修改以检测函数。

if(typeof customValidationRule != "function")
{
    var string = customValidationRule.match(/<!(.*?)!>/g);
    var customValidationTerms = new Array();

    var execCustomValidationRule = customValidationRule;

    $.each(string, function(i, v){

        var customValidationTerm = v.replace(/<!/g, "").replace(/!>/g, "");
            customValidationTerms.push(customValidationTerm);
    });

    $.each(customValidationTerms, function(i, v){

        var RegEx = new RegExp("<!"+v+"!>", "ig");

        if(v == "this")
        {
            var newData = value ? value : "''"; 
        }
        else
        {
            var newData = FormData[parentKey][TermNames[v]] ? FormData[parentKey][TermNames[v]] : "''";
        }

        newData = dataType == "currency" ? cleanVar(cleanCurrency(newData)) : newData;
        newData = newData ? newData : "''";

        execCustomValidationRule = execCustomValidationRule.replace(RegEx, newData);

    });

}
else
{
    var customValidationRuleString = customValidationRule().toString();

    var string = customValidationRuleString.match(/<!(.*?)!>/g);
    var customValidationTerms = new Array();

    var execCustomValidationRule = customValidationRuleString;

    $.each(string, function(i, v){

        var customValidationTerm = v.replace(/<!/g, "").replace(/!>/g, "");
            customValidationTerms.push(customValidationTerm);
    });

    $.each(customValidationTerms, function(i, v){

        var RegEx = new RegExp("<!"+v+"!>", "ig");

        if(v == "this")
        {
            var newData = value ? value : "''"; 
        }
        else
        {
            var newData = FormData[parentKey][TermNames[v]] ? FormData[parentKey][TermNames[v]] : "''";
        }

        newData = dataType == "currency" ? cleanVar(cleanCurrency(newData)) : newData;

        newData = newData ? newData : "''";

        execCustomValidationRule = execCustomValidationRule.replace(RegEx, newData);

    });

    var backToFunction =  eval('(' + execCustomValidationRule + ')');

    //validation = customValidationRule();
}

validation = eval(execCustomValidationRule);

0 个答案:

没有答案