我有一个像这样的数据对象
var myData = {
"birthYear" : "1956",
"name" : "Bryan Lee Cranston"
"birthPlace" : "California"
}
和这样的变量
var myInfoText = #name# born #birthYear#, is an actor, and producer. He is best known for #best_known#";
现在我需要一个函数来检查myInfoText中的#sample#pattern。如果它在其中找到此模式,则会检查此键的myData对象属性,并在此属性值的帮助下替换myInfoText变量。
最后我期待这样的事情:
Bryan Lee Cranston 出生 1956 是演员和制片人。他最出名的是#best_known#“;
我知道我可以用正则表达式做到这一点但是相信我,无论我怎么努力,我对这个正则表达式的东西都不了解。谢谢。
答案 0 :(得分:2)
像这样:
function parseTemplate(str, data){
return str.replace(/#([^#]+)#/g, function($0, $1){
return data.hasOwnProperty($1) ? data[$1] : $0;
})
}
现在,在您的示例中使用此函数:
parseTemplate('#name# born #birthYear#, is an actor, and producer. He is best known for #best_known#', {
"birthYear" : "1956",
"name" : "Bryan Lee Cranston",
"birthPlace" : "California"
});
将返回:
"Bryan Lee Cranston born 1956, is an actor, and producer. He is best known for #best_known#"
答案 1 :(得分:0)
假设你有jQuery,你可以像这样遍历对象:
var myData = {
"birthYear" : "1956",
"name" : "Bryan Lee Cranston",
"birthPlace" : "California"
};
var myInfoText = '#name# born #birthYear#, is an actor, and producer. He is best known for #best_known#';
$.each(myData, function(key, value) {
var regex = new RegExp('#' + key + '#', 'g');
myInfoText = myInfoText.replace(regex, value);
});
console.log(myInfoText);
如果没有jQuery,您需要以不同的方式遍历对象。重要的部分是回调函数中的正则表达式。
修改:我为RegExp
添加了一个全局修饰符,以防有重复键(感谢@ h2ooooooo)。