Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How would you turn a JavaScript variable into a Template literal?

I would like to take text that I generated and stored in a string and use it like a template literal.

var generatedText = "Pretend this text was generated and then stored in a variable. "; 
generatedText = "But I still need to use it as a template it to get ${variable}.";

var variable = "Successs!!!!";

console.log(generatedText);
//prints 'But I still need to interpolate it to get ${variable}.'
//how can I make it print using variable in it like a template as if it were doing this
console.log(`But I still need to use it as a template it to get ${variable}.`);
//prints 'But I still need to use it as a template it to get Successs!!!!.'

How can I get generated text to become a template string?

generatedText must start in a variable so I need to find a way to convert it to a template string if possible.

Edit:

I didn't think I would have to put this but also I don't want to use eval to risk evaluating random code...

like image 560
Trevor Avatar asked Aug 20 '19 01:08

Trevor


People also ask

What is template literals in JavaScript with example?

Template literals (template strings) allow you to use strings or embedded expressions in the form of a string. They are enclosed in backticks `` . For example, const name = 'Jack'; console. log(`Hello ${name}!`); // Hello Jack!

How do you write literals in JavaScript?

A string literal is zero or more characters, either enclosed in single quotation (') marks or double quotation (") marks. You can also use + operator to join strings. The following are the examples of string literals : string1 = "w3resource.com"


Video Answer


1 Answers

For the general situation, you can use a replacer function to replace every occurrence of ${someProp} with the someProp property on an object:

const interpolate = (str, obj) => str.replace(
  /\${([^}]+)}/g,
  (_, prop) => obj[prop]
);

const generatedText = "But I still need to use it as a template it to get ${variable}.";
const variable = "Successs!!!!";

console.log(interpolate(generatedText, { variable }));

The regular expression \${([^}]+)} means:

  • \$ - Literal $
  • { - Literal {
  • ([^}]+) First (and only) capture group:
    • [^}]+ - One or more characters which are not }
  • } - Literal }

Since prop is the property name found in between the brackets, replace with obj[prop] to replace with the desired replacement.

like image 78
CertainPerformance Avatar answered Sep 21 '22 10:09

CertainPerformance