如何在javascript中使用正则表达式格式化文本?

如何在javascript中使用正则表达式格式化文本?,javascript,regex,Javascript,Regex,我有一个文本,在大括号中有格式字符 let str = "My name is {name} and age is {age}!"; 我想用对象属性更改此属性 var myobj = { name: "x", age: "25" } 结果文本应该是我的名字是x,年龄是25岁 我可以使用正则表达式获取文本中的名称和年龄值 let regex = /\{([^}]+)\}/g; let matches = str.match(regex

我有一个文本,在大括号中有格式字符

let str = "My name is {name} and age is {age}!";
我想用对象属性更改此属性

var myobj = { name: "x", age: "25" }
结果文本应该是我的名字是x,年龄是25岁

我可以使用正则表达式获取文本中的名称和年龄值

let regex = /\{([^}]+)\}/g;
let matches = str.match(regex).map(x => x.replace(/[{}]/g, ""));
匹配项为数组[名称、年龄]

但是如何使用正则表达式替换为对象属性呢?有可能是一种短方法吗?

您可以使用。替换方法并通过键从myobj获取值,该值已使用当前正则表达式捕获到组1中:

让str=我的名字是{name},年龄是{age}{x}!{从myobj失踪}; var myobj={name:x,age:25,x:} 设regex=/{[^{}]+}/g; console.log str.replaceregex,x,y=>myobj[y]!=未定义?myobj[y]:x; //或者更现代一点的变化 console.log str.replaceregex,x,y=>myobj[y]??x 您可以使用.replace方法并通过键从myobj获取您已使用当前正则表达式捕获到组1中的值:

让str=我的名字是{name},年龄是{age}{x}!{从myobj失踪}; var myobj={name:x,age:25,x:} 设regex=/{[^{}]+}/g; console.log str.replaceregex,x,y=>myobj[y]!=未定义?myobj[y]:x; //或者更现代一点的变化 console.log str.replaceregex,x,y=>myobj[y]??x;正则表达式 你可以用。这将允许您替换匹配的内容,如果它匹配一个键或跳过它

函数替换文本{ 设regex=/\{[^}]+\}/g; return text.replaceregex,fullMatch,capture=>{ //如果未找到替换项,则使用首字母作为默认值 让结果=完全匹配; //看看我们是否有这个占位符的替代品 如果在obj中捕获{ 结果=obj[捕获]; } //返回要使用的值,而不是占位符 返回结果; } } 让str=我的名字是{name},年龄是{age}!; 设myobj={name:x,age:25}; console.logreplacestr,myobj; console.logreplaceholl,{location}是{age}岁,myobj;正则表达式 你可以用。这将允许您替换匹配的内容,如果它匹配一个键或跳过它

函数替换文本{ 设regex=/\{[^}]+\}/g; return text.replaceregex,fullMatch,capture=>{ //如果未找到替换项,则使用首字母作为默认值 让结果=完全匹配; //看看我们是否有这个占位符的替代品 如果在obj中捕获{ 结果=obj[捕获]; } //返回要使用的值,而不是占位符 返回结果; } } 让str=我的名字是{name},年龄是{age}!; 设myobj={name:x,age:25}; console.logreplacestr,myobj;
console.logreplaceholl,{location}是{age}岁,myobj 您可以尝试使用String.prototype.replace替换

让str=我的名字是{name},年龄是{age}!; var myobj={姓名:x,年龄:25}; 设regex=/\{[^}]+\}/g; const res=str.replaceregex,match,key=>myobj[key]| | match;
console.logres 您可以尝试使用String.prototype.replace替换

让str=我的名字是{name},年龄是{age}!; var myobj={姓名:x,年龄:25}; 设regex=/\{[^}]+\}/g; const res=str.replaceregex,match,key=>myobj[key]| | match;
console.logres;只是为了验证,它必须是正则表达式吗?一个模板文本可以做得更简单:`我的名字是{myobj.name},年龄是{myobj.age}!'甚至‘我的名字是{name},年龄是{age}!’如果确保名称和年龄是变量。str.replaceregex,x,y=>myobj[y]?myobj[y]:x@VLAZ,我需要正则表达式解决方案,我知道你的解决方案。只是为了验证,它必须是正则表达式吗?一个模板文本可以做得更简单:`我的名字是{myobj.name},年龄是{myobj.age}!'甚至‘我的名字是{name},年龄是{age}!’如果确保名称和年龄是变量。str.replaceregex,x,y=>myobj[y]?myobj[y]:x@VLAZ,我需要正则表达式解决方案,我知道你的解决方案。myobj[y]| | x产生更多cleaner@User863如果替换为空字符串,它也可能意外触发。@VLAZ替换在这里是可调用的,它不是空字符串。[^{}]+匹配一个或多个字符,在大括号之间总会有一些文本,因此不可能搜索空字符串键。@WiktorStribiżew我的意思是,如果myobj[y]是空字符串,这是错误的,那么它将返回占位符,而不是删除它。str=你好{foo};例如,myobj={foo:}。myobj[y]| | x产生更多cleaner@User863如果替换为空字符串,它也可能意外触发。@VLAZ替换在这里是可调用的,它不是空字符串。[^{}]+匹配一个或多个字符,在大括号之间总会有一些文本,因此不可能搜索空字符串键。@WiktorStribiżew我的意思是,如果myobj[y]是空字符串,这是错误的,那么它将返回占位符,而不是删除它。str=你好{foo};例如,myobj={foo:}。