Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 替换多次出现的动态字符串?_Javascript_Jquery_Regex_Performance - Fatal编程技术网

Javascript 替换多次出现的动态字符串?

Javascript 替换多次出现的动态字符串?,javascript,jquery,regex,performance,Javascript,Jquery,Regex,Performance,我不确定我能否在标题中解释得更好,但我会在这里解释得更好。我试图创建一个函数,作为一个简单的“模板”。我给它一个带有特定标记“{name}}”的字符串,它将用特定字符串替换它 以下是我到目前为止的情况: 调用函数: loadTemplate("<div>{{name}}, {{anotherString}}</div>", { name: "Hunter", anotherString: "is amazing!!!!" }); // Created

我不确定我能否在标题中解释得更好,但我会在这里解释得更好。我试图创建一个函数,作为一个简单的“模板”。我给它一个带有特定标记“{name}}”的字符串,它将用特定字符串替换它

以下是我到目前为止的情况:

调用函数:

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答案(因为我要求的是一种快速、简单的方法,如果可能的话),但你也回答了我的问题。谢谢。