繁体   English   中英

如何使用正则表达式替换 javascript 中的字符串

[英]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。
  • 回调function中, match参数代表匹配到的substring, group参数代表抓取到的内容。
  • group用于使用方括号表示法访问obj object 中的相应属性。
  • replace()方法返回经过替换的修改后的字符串。

由此产生的expected值将是:“Foo 是 Dev team.Foo 开始了他作为 Dev 的角色”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM