Javascript 符号之间的正则表达式模式
我有一个这样的数据对象Javascript 符号之间的正则表达式模式,javascript,regex,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#"; 像这样的变量 var myData = {
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#";
像这样的变量
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#模式。如果在其中找到此模式,则将检查此键的myData对象属性,并使用此属性值替换myInfoText变量
最后,我期待着这样的事情:
布莱恩·李·克兰斯顿生于1956年是一名演员和制片人。他以“最出名”而闻名
我知道我可以用regex做到这一点,但请相信我,无论我怎么努力,我都不理解regex的东西。谢谢。像这样:
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#"
假设您有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
中添加了一个全局修饰符,以防出现重复的键(谢谢@h2oooooo)。请分享您的辛勤工作:p…即您的代码..您尝试了什么。这是我迄今为止实现的最佳模式var RegExp=/#([^]+)#/
但是它只从句子中得到一个匹配项,并且表现得像##是一个匹配项。这个解决方案有一些警告:当数据[$1]
包含之类的值时“
,它将反弹回模板字符串。”。。当for
循环可以做完全相同的事情时,不要仅仅为了使用jQuery而使用jQuery。@h2ooooooo,老实说……我放松了。但这就是为什么我强调了jQuery的必要性,以使其真正起作用。我让OP修改我的答案,使之适合他的环境(所以他/她在这一过程中学会了)。大部分答案与RegExp
和String.replace()
有关。尽管如此,我的评论还是很有道理的。但是,如果存在多个模板键,此解决方案将不起作用。(newregex(Regex,'g')
会解决这个问题)