RegExp与Node.js中的预期模式不匹配

安德鲁夫

我正在编写一个脚本,它将使用我的所有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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章