我正在编写一个脚本,它将接受我的所有 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,
}
}
我已经尝试过(除其他外):
- /(.+[\n\r]).+process.env(.+[\n\r])+/g
- /const dbconfig(.+[\s\n\r])+/g
- /(.+\s).+process.env(.+\s)+/g
其中每一个都与预期的整个对象声明匹配,但在 Node 中它将替换:
- 什么都没有,保持原样
- 第一行(const dbconfig = {
- 包含 process.env 的所有行,但保留其余部分
我不知道为什么会得到不同的结果,以及为什么会失败。欢迎任何建议!
编辑: 抱歉,没有提供足够的详细信息。我所说的替换是指我正在替换一个空字符串“”。 我正在将文件读入目录名称循环内的数组,如下所示:
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 包替换文件 jsut 。 是的,我确实意识到这段代码目前有点困惑和低效,它只是试图获得所需结果的基本实现的迭代。
最佳答案
我仍然不知道为什么我会得到在线正则表达式构建器/测试器和 Node 之间的区别,但你知道了。我现在有了一个有效的实现:
/(.*\s*).+process\.env(.*\s*)*?\}\s*\}/gm
关于javascript - RegExp 与 Node.js 中的预期模式不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56895918/