[英]How to replace the string using regex in javascript
我有以下字符串和 object,
const str = "$(role.name) is $(role) team. $(role.name) started his role as $(role)"
const obj = {
role: 'Dev',
'role.name': 'Foo',
}
const expected = "Foo is Dev team.Foo started his role as Dev"
如何使用正则表达式?
我的正则表达式,
const data = str.match(/\$\((.*?)\)/g)
您应该替换而不是匹配。 由于您已经拥有捕获组,因此您可以检查组 1 是否作为键存在于对象中。
请注意,在您的expected
中,这里没有空间team.Foo
const str = "$(role.name) is $(role) team. $(role.name) started his role as $(role)" const regex = /\$\(([^()]*)\)/g; const obj = { role: 'Dev', 'role.name': 'Foo', } const result = str.replace(regex, (m, g1) => obj.hasOwnProperty(g1)? obj[g1]: m); console.log(result);
您可以使用具有正则表达式模式的 replace() 方法。
下面是一个示例,说明如何使用给定字符串和 object 实现所需的替换:
const str = "$(role.name) is $(role) team. $(role.name) started his role as $(role)"; const obj = { role: 'Dev', 'role.name': 'Foo', }; // Create a regular expression pattern to match the placeholders const pattern = /\$\(([\w.]+)\)/g; // Replace the placeholders with the corresponding values from the object const result = str.replace(pattern, (match, key) => obj[key]); console.log(result); // Output: "Foo is Dev team. Foo started his role as Dev"
对于非正则regex
解决方案, replaceAll
非常简单。
请注意,正如评论中所指出的,尽管这在大多数情况下都有效,但请注意,如果对其中一个传递的替换最终在后续传递中创建了另一个有效标签,则这些标记也会被替换。 因此,我会说最干净的解决方案是
regex
和(match, key)
回调。 我会把这个答案留在这里,因为它仍然可能对其他人有用。
const str = "$(role.name) is $(role) team. $(role.name) started his role as $(role)" const obj = { role: 'Dev', 'role.name': 'Foo', } const fillTemplate = (str, obj) => { let ret = str; for ([k,v] of Object.entries(obj)) ret = ret.replaceAll(`$(${k})`, v); return ret; } console.log(fillTemplate(str, obj));
要使用正则表达式替换 JavaScript 中的字符串,您可以使用 replace() 方法和正则表达式模式。 以下是使用给定字符串和 object 获得预期结果的方法:
const str = "$(role.name) is $(role) team. $(role.name) started his role as $(role)"; const obj = { role: 'Dev', 'role.name': 'Foo', }; const expected = str.replace(/\$\((.*?)\)/g, (match, group) => { const property = group.replace(/\./g, '\\.'); return obj[property]; }); console.log(expected);
解释:
/\$\((.*?)\)/g
匹配任何以$(
开头并以)
结尾的 substring。 .*?
非贪婪地捕获内部内容。replace()
方法用回调 function 替换每个匹配的 substring。match
参数代表匹配到的substring, group
参数代表抓取到的内容。group
用于使用方括号表示法访问obj
object 中的相应属性。replace()
方法返回经过替换的修改后的字符串。 由此产生的expected
值将是:“Foo 是 Dev team.Foo 开始了他作为 Dev 的角色”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.