Javascript 在NodeJS中查找和替换的更干净的方法?
我目前正在尝试读取一个文件,将内容和多个数组传递给函数;使用regex查看其中是否有匹配项,然后替换并最终更新 我编写的代码看起来既丑陋又笨拙,如下所示:Javascript 在NodeJS中查找和替换的更干净的方法?,javascript,node.js,lodash,Javascript,Node.js,Lodash,我目前正在尝试读取一个文件,将内容和多个数组传递给函数;使用regex查看其中是否有匹配项,然后替换并最终更新 我编写的代码看起来既丑陋又笨拙,如下所示: find_and_replace: function(file, ...items) { let str = _.clone(file); let valid = {}; let do_escape = true; let hit; if (items != null ? items.length :
find_and_replace: function(file, ...items) {
let str = _.clone(file);
let valid = {};
let do_escape = true;
let hit;
if (items != null ? items.length : void 0) {
for (let i = 0, len = items.length; i < len; i++) {
let obj = items[i];
try {
for (k in obj) {
let v = obj[k];
if (valid[k] == null) {
valid[k] = v;
}
}
} catch (error) { }
}
try {
str = str.replace('/{{([\s\S]+?)}}/g', function(a, b) {
if (hit = valid[b]) {
if (do_escape) {
return escape(hit);
} else {
return hit;
}
}
return '';
});
} catch (error) {
console.log(error);
}
}
return str;
},
查找和替换:函数(文件,…项){
让str=\ u0.clone(文件);
设valid={};
让我们逃避=真;
让我们打;
if(items!=null?items.length:void 0){
for(设i=0,len=items.length;i
该功能的使用如下所示:
for (let _i = 0, _len = files.length; _i < _len; _i++) {
let x = files[_i];
if(x.includes('node_modules')) {
continue;
}
builder.find_and_replace(builder.read_file(x), main_config, second_config);
break;
}
for(let _i=0,_len=files.length;_i<_len;_i++){
设x=files[_i];
if(x.includes('node_modules')){
继续;
}
builder.find_和替换(builder.read_文件(x)、主配置、第二配置);
打破
}
此“系统”的功能是从文件中查找任何{{tag}
占位符,并从..items
组合数组中替换为正确的键
如果有人能为我指出降低所需代码量的正确方向,我将不胜感激。一些简化可能包括使用
Object.entries
或Array.reduce
方法
function find_and_replace(file, ...items) {
let str = _.clone(file);
let do_escape = true;
let hit;
if (items != null ? items.length : void 0) {
const valid = items.reduce((valid, obj) => {
Object.entries(obj)
.map([k, v] => {
valid[key] = v;
});
return valid;
}, {});
try {
str = str.replace('/{{([\s\S]+?)}}/g', (a, b) => hit === valid[b] ? (do_escape ? escape(hit) : hit) : '');
} catch (error) {
console.log(error);
}
}
return str;
},
一些简化可能包括使用
Object.entries
或Array.reduce
方法
function find_and_replace(file, ...items) {
let str = _.clone(file);
let do_escape = true;
let hit;
if (items != null ? items.length : void 0) {
const valid = items.reduce((valid, obj) => {
Object.entries(obj)
.map([k, v] => {
valid[key] = v;
});
return valid;
}, {});
try {
str = str.replace('/{{([\s\S]+?)}}/g', (a, b) => hit === valid[b] ? (do_escape ? escape(hit) : hit) : '');
} catch (error) {
console.log(error);
}
}
return str;
},
使用函数rest参数(
…items
)时,总是会在items
下获得一个数组,因此如果(items!=null?items.length:void 0)
是冗余的
items.reduce((all,obj)=>({…all,…obj}),{})
从…items
(string,[key,value])=>string.replace(新的RegExp(`{{${key}}}}}},“gi”),value)
将从对象中查找所有出现的键,并用值替换它们
const tr=(string,…items)=>“”+Object.entries(items.reduce((all,obj)=>({…all,…obj}),{})).reduce((string,[key,value])=>string.replace(new RegExp({{${key}}}},“gi”),value),string);
log(tr(“{{h}}{{{w}}!”,{h:“你好”},{w:“世界”}))代码>当您使用函数rest参数(…items
)时,总是会在项下获得一个数组,因此如果(items!=null?items.length:void 0)
是冗余的
items.reduce((all,obj)=>({…all,…obj}),{})
从…items
(string,[key,value])=>string.replace(新的RegExp(`{{${key}}}}}},“gi”),value)
将从对象中查找所有出现的键,并用值替换它们
const tr=(string,…items)=>“”+Object.entries(items.reduce((all,obj)=>({…all,…obj}),{})).reduce((string,[key,value])=>string.replace(new RegExp({{${key}}}},“gi”),value),string);
log(tr(“{{h}}{{{w}}!”,{h:“你好”},{w:“世界”}))
您的问题中是否可以包含函数的用途和预期输出?@KrzysztofKrzeszewski我已经讨论并包含了此函数的预期用途。您的问题中是否可以包含函数的用途和预期输出?@KrzysztofKrzeszewski我已经讨论并包含了此函数的预期用途