Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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_Regex - Fatal编程技术网

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')
会解决这个问题)