符号之间的正则表达式模式

时间:2014-02-03 19:37:07

标签: javascript regex

我有一个像这样的数据对象

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#“;

我知道我可以用正则表达式做到这一点但是相信我,无论我怎么努力,我对这个正则表达式的东西都不了解。谢谢。

2 个答案:

答案 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)。