Javascript 替换多次出现的动态字符串?
我不确定我能否在标题中解释得更好,但我会在这里解释得更好。我试图创建一个函数,作为一个简单的“模板”。我给它一个带有特定标记“{name}}”的字符串,它将用特定字符串替换它 以下是我到目前为止的情况: 调用函数:Javascript 替换多次出现的动态字符串?,javascript,jquery,regex,performance,Javascript,Jquery,Regex,Performance,我不确定我能否在标题中解释得更好,但我会在这里解释得更好。我试图创建一个函数,作为一个简单的“模板”。我给它一个带有特定标记“{name}}”的字符串,它将用特定字符串替换它 以下是我到目前为止的情况: 调用函数: loadTemplate("<div>{{name}}, {{anotherString}}</div>", { name: "Hunter", anotherString: "is amazing!!!!" }); // Created
loadTemplate("<div>{{name}}, {{anotherString}}</div>", {
name: "Hunter",
anotherString: "is amazing!!!!"
});
// Created this to make my life easier :)
function loadTemplate(template, data) {
var tags = template.split("{{").pop().split("}}").shift();
console.log(tags); // This only gives me the last occurrence.
}
如何循环遍历字符串中所有出现的{{variable}},以便用关联数据替换它
类似于
handlebar.js
(我想要一个超轻量和快速的功能,而不是一个完整的插件)搜索/替换数据对象中的每个键:
函数加载模板(模板,数据){
var-RE,d;
对于(数据中的d){
RE=newregexp('{{'+d+'}}','g');
模板=模板。替换(RE,数据[d]);
}
控制台日志(模板);
}
loadTemplate(“{{name},{{{anotherString}},”{
姓名:“猎人”,
另一个字符串:“太棒了!!!!”
});代码>使用替换文本的回调替换一个正则表达式非常容易:
函数加载模板(模板,数据){
返回模板。替换(/\{(\w+)\}}/g,函数(匹配,键){
返回数据[键];
});
}
警报(loadTemplate(“{{name}},{{{anotherString}}”){
姓名:“猎人”,
另一个字符串:“太棒了!!!!”
}));代码>我喜欢你的“拆分”想法,我说坚持下去:
window.loadTemplate=函数(模板,数据){
var i=0;
var bool=真;
while(bool){
试一试{
var tags=template.split(“{”)[i+2]。split(“}”)[0];
警报(标签);
i+=2;
}捕获(e)
{
布尔=假;
}
}
}
td{
边框:黑色实心1px;
}
Load Template
@IsmailBadawi现在看一下,谢谢。我知道如何替换数据,是“正则表达式”或循环部分让我困惑。我将彻底准备好它的文档。谢谢。也谢谢你的回答。在你和瑞克之间,他们使用正则表达式的速度有问题吗?我听说他们会很慢。嗯。。。我的会更快,因为它有一个替代品。Rick's对数据中的每个键进行一次替换,并为每个键编译一个正则表达式。但是,如果这对您很重要,您应该对性能进行基准测试。此外,正则表达式在这种情况下不应该太慢,因为它们基本上是由JS解释器运行的,JS解释器可以通过不创建临时字符串来优化执行速度。我相信,通过脚本代码进行字符串操作,它们将比你自己能做的任何事情都要快。看看这个,这个测试是否“准确”:对于给定的输入,@Lucastzesniewski的答案确实比我的答案快约0.15%(在Chrome中):@RickHitchcock由于性能原因,我授予Lucas答案(因为我要求的是一种快速、简单的方法,如果可能的话),但你也回答了我的问题。谢谢。