Javascript Regexp заменить несколько строк, соответствующих именам свойств другого литерала объекта - PullRequest
1 голос
/ 15 июня 2019

Я объявил:

var obj = {aaa: "came", bbb: "saw", ccc: "conquered", zzz: "discarded" };

var str = "I {aaa}, I {bbb}, I {ccc}. Then I {aaa} again."

Что я хочу сделать, это str.replace() каждая строка в фигурных скобках с соответствующим именем свойства из obj.В итоге у меня должно быть:

I came, I saw, I conquered. Then I came again.

Спасибо.

РЕДАКТИРОВАТЬ: Связанный дубликат действительно оказался очень подходящим для моего случая.Кроме того, ответы на этот вопрос фактически предоставляют динамические решения для случая, когда я не знал свойств obj раньше времени.

Ответы [ 3 ]

4 голосов
/ 15 июня 2019

Захватите то, что находится между {} с, и используйте обратный вызов для заменителя, чтобы найти это захваченное свойство объекта:

var obj = {aaa: "came", bbb: "saw", ccc: "conquered", zzz: "discarded" };
var str = "I {aaa}, I {bbb}, I {ccc}. Then I {aaa} again.";

const output = str.replace(/{([^}]+)}/g, (_, prop) => obj[prop]);
console.log(output);
3 голосов
/ 15 июня 2019

Вы можете использовать функцию обратного вызова метода замены

var obj = {aaa: "came", bbb: "saw", ccc: "conquered", zzz: "discarded" };
var str = "I {aaa}, I {bbb}, I {ccc}. Then I {aaa} again."

let op = str.replace(/\{([^}]+)\}/g, (_,g1)=> obj[g1] || _)

console.log(op)
2 голосов
/ 15 июня 2019

Самый простой и элегантный подход - использовать интерполяция строк

var obj = {aaa: "came", bbb: "saw", ccc: "conquered", zzz: "discarded" };

var str = `I ${obj.aaa}, I ${obj.bbb}, I ${obj.ccc}. Then I ${obj.aaa} again.`

console.log(str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...