如何在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:}。