2016-02-03 117 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 - 有不同的表現,還是個人喜好? –

相關問題