简体   繁体   English

用lodash替换为字符串

[英]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? 有没有一种雄辩的方法可以用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 )

"

Solution: 解:

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

You can use String.prototype.replace() with a regexp that contain all search words, and replace them using replace callback: 您可以将String.prototype.replace()与包含所有搜索词的regexp一起使用,并使用replace回调将其replace

 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); 

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) 

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

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