作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
今天早些时候我发布了this question ,很快就得到了令我满意的答复。
自从出现新需求以来,我现在需要用它的值递归地替换变量占位符
这是我当前的代码示例。完整的小部件可在 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()
函数,以确保 {}
中包含的所有值> 被替换。
我怎样才能实现这个目标?
最佳答案
您可以使用您的模式进行循环,当它继续匹配时,继续进行替换:
_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
关于javascript - 用变量的值递归替换占位符文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35179047/
我是一名优秀的程序员,十分优秀!