我正在编写一个脚本,它将使用我的所有Lambda函数并创建用于本地测试的Node服务器。我正在尝试从每个文件中删除所有dbconfig对象。我使用https://regexr.com/测试了我的模式,并且做了很多变体,所有变体都可以在其中工作,但是它们在我的脚本中不起作用。我不知道为什么。所有对象看起来像这样:
const dbconfig = {
server: process.env.SERVER,
userName: process.env.USER_NAME,
password: process.env.PASSWORD,
options: {
database: process.env.DATABASE,
table: process.env.TABLE,
encrypt: true,
requestTimeout: 300000,
rowCollectionOnRequestCompletion: true,
}
}
我已经尝试过(其中包括):
其中的每一个都符合预期的匹配整个对象的声明,但是在Node中它将替换:
我不知道为什么我会得到不同的结果,为什么会失败。欢迎任何建议!
编辑: 抱歉,没有足够的细节。替换是指我正在替换空字符串''。 我正在将文件读入目录名称循环中的数组中,如下所示:
files.push(fs.readFileSync(`../lambda/${folder}/index.js`, {encoding: 'utf8'}));
我从每个这样的库中提取所需的库:
let imports = new Set();
let arr;
files.forEach((file, idx) => {
while ((arr = replaceOptions.from[0].exec(file)) !== null) {
imports.add(arr[0]);
}
});
然后我将文件加入一个主文件中,去掉需求并尝试进行这些配置,然后在顶部附加一个副本:
fs.writeFileSync('joined.js', files.join('\n'));
try {
const results = replace.sync(replaceOptions);
console.log('Replacement results:', results);
}
catch (error) {
console.error('Error occurred:', error);
}
fs.writeFileSync('server.js', Array.from(imports.values()).join('\n'));
fs.appendFileSync('server.js', fs.readFileSync('joined.js'));
我以前是自己进行字符串替换的,但是为了方便起见,最终还是使用了npm包replace-in-file jsut,以防万一我在那儿塞了东西。 是的,我确实意识到该代码目前有点混乱且效率低下,它只是试图获得所需结果的基本成果的反复尝试。
答案 0 :(得分:0)
我仍然不知道为什么我会得到在线正则表达式生成器/测试器和Node之间的区别,但是您就可以了。我现在有一个可行的实现:
/(.*\s*).+process\.env(.*\s*)*?\}\s*\}/gm