Leonel Matias Domingos
Leonel Matias Domingos

Reputation: 2060

Replace in string with lodash

I have an object with several attributes that i want to replace in a string.

replaceBy:{
          "PRS_JOBS_MAQUINA":"PRS_JOBS_WORKCENTER",
          "CD_MAQ":"CD_WKC",
          "DT_INI_MAQ":"DT_INI_WKC",
          "DT_INI_JM" :"DT_INI_JW"
          }

Is there an eloquent way to do this with lodash? Here is the string

" 

AND ( CD_JOB, DT_INI_JOB ) IN  (SELECT x.CD_JOB, x.DT_INI_JM FROM PRS_JOBS_MAQUINA x WHERE x.EMPRESA = ':EMPRESA' AND x.CD_MAQ = ':CD_MAQ' AND TO_CHAR(x.DT_INI_MAQ, 'YYYY-MM-DD') = ':DT_INI_MAQ'
AND TO_CHAR(x.DT_INI_JM, 'YYYY-MM-DD') = '1900-01-01'  AND x.DT_FIM IS NULL )

"

Upvotes: 0

Views: 2909

Answers (3)

Ori Drori
Ori Drori

Reputation: 192422

You can use String.prototype.replace() with a regexp that contain all search words, and replace them using replace callback:

function replaceByMap(str, replaceBy) {
  var search = new RegExp(Object.keys(replaceBy).join('|'), 'g'); // creates a regexp of the strings to replace

  return str.replace(search, function(match) { // iterates the string, and replace the strings found with their replacements from the map
    return replaceBy[match];
  });
}

var replaceBy = {
  "PRS_JOBS_MAQUINA": "PRS_JOBS_WORKCENTER",
  "CD_MAQ": "CD_WKC",
  "DT_INI_MAQ": "DT_INI_WKC",
  "DT_INI_JM": "DT_INI_JW"
};

var str = "AND ( CD_JOB, DT_INI_JOB ) IN  (SELECT x.CD_JOB, x.DT_INI_JM FROM PRS_JOBS_MAQUINA x WHERE x.EMPRESA = ':EMPRESA' AND x.CD_MAQ = ':CD_MAQ' AND TO_CHAR(x.DT_INI_MAQ, 'YYYY-MM-DD') = ':DT_INI_MAQ' AND TO_CHAR(x.DT_INI_JM, 'YYYY-MM-DD') = '1900-01-01'  AND x.DT_FIM IS NULL )";

var result = replaceByMap(str, replaceBy);
console.log(result);

Upvotes: 1

mplungjan
mplungjan

Reputation: 178350

Why use a library?

 var replaceBy={
              "PRS_JOBS_MAQUINA":"PRS_JOBS_WORKCENTER",
              "CD_MAQ":"CD_WKC",
              "DT_INI_MAQ":"DT_INI_WKC",
              "DT_INI_JM" :"DT_INI_JW"
              }, str=  "AND ( CD_JOB, DT_INI_JOB ) IN  (SELECT x.CD_JOB, x.DT_INI_JM FROM PRS_JOBS_MAQUINA x WHERE x.EMPRESA = ':EMPRESA' AND x.CD_MAQ = ':CD_MAQ' AND TO_CHAR(x.DT_INI_MAQ, 'YYYY-MM-DD') = ':DT_INI_MAQ' AND TO_CHAR(x.DT_INI_JM, 'YYYY-MM-DD') = '1900-01-01'  AND x.DT_FIM IS NULL )"

for (var rb in replaceBy) {
  str = str.replace(new RegExp(rb, "g"),replaceBy[rb]);
}
console.log(str)

Upvotes: 0

Piotr Białek
Piotr Białek

Reputation: 2717

Solution:

var yourString = 'your string';
_.forEach(replaceBy, function(value, key) {
    yourString = _.replace(string, key, value);
});

Upvotes: 2

Related Questions