使用变量的值递归替换占位符文本

时间:2016-02-03 13:56:48

标签: javascript jquery variables

今天早些时候我发布了this question,很快就回复了我的意见。

自新要求曝光以来,我现在需要用它的值替换变量占位符 recursivly

以下是我目前的代码示例。完整小部件可在this Pastebin -

中找到
$.widget('custom.contents', {

    options : {

        singleID    : 'content-{index}',
        linkID      : 'link_to_{singleID}'

    }, // options

    _create : function(){

        console.log(this._getOption(25, 'linkID'));

    }, // _create

    _getOption : function(index, option){

        var t = this;   // The object

        var optionValue = this.options[option].replace(/{(.+?)}/g, function(_, name){
            return name === 'index' ? index : t.options[name];
        });

        return optionValue;

    } // _getOption

});

如果我要包含console.log(this._getOption(25, 'linkID'));,则输出值为link_to_foobar-{index}

在返回该值之前,我希望递归运行_getOption()函数,以确保替换{}中包含的所有值。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

你可以使用你的模式做一个循环,当它继续匹配时,继续进行替换:

_getOption = function(index, option){

    var opt = this.options[option];
    var pattern = /{(.+?)}/g;
    while(pattern.test(opt)){
      opt = opt.replace(pattern, function(_, name){   // Search for all instances of '{(.+?)}'...
          return name === 'index' ? index : t.options[name];                          // ...Replace all instance of '{(.+?)}' with the value of the associated variable
      });
    }

    return opt;

} // _getOption

实例:https://jsfiddle.net/7ng1bhda/1/