今天早些时候我发布了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 :(得分: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