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

标签 javascript node.js regex

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

相关文章:

javascript - 使用JQuery动态添加表格行设置小行高

javascript - 如何将 uncrustify 与 atom-beautify 一起使用?

javascript - 关于io.sockets.manager和Socket.io的join函数的各种问题

javascript - 正则表达式无效量词

java - 如何获取java字符串中.之前的()之间的值?

javascript - 织物 Canvas - 图像分辨率很差

javascript - 如何使用单选按钮计算 Highcharts 的输出

javascript - Sequelize 类型错误 : Cannot read property 'max' of undefined

javascript - 查找字符串中每个出现的正则表达式

javascript - Angularjs: `$applyAsync` 与 `$apply` 带套接字