2016-02-03 52 views
0

今天早些时候,我发布了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()功能,保证内{}封闭所有值被替换。

我该如何做到这一点?

+0

你可以添加现场演示。 – Tushar

+0

当函数被调用为'_getOption()'时,函数内部的this就是'window'对象。 – Tushar

+0

@Tushar我认为我们可以放心地假设'options'和'_getOption'函数都在同一个对象中;} – Jamiec

回答

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/

+0

'opt.match(pattern)'==>'pattern.test(opt)' – Tushar

+0

Spot on,thanks for your assistance。 –

+0

@Tushar - 有不同的表现,还是个人喜好? –

相关问题