RegExp не соответствует ожидаемому шаблону в Node.js - PullRequest
1 голос
/ 05 июля 2019

Я пишу скрипт, который будет принимать все мои лямбда-функции и создавать 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,
  }
}

Я пытался (среди прочих):

  • / (. + [\ П \ г]) +. Process.env (+. [\ П \ г]) + / г
  • / const dbconfig (. + [\ S \ n \ r]) + / g
  • / (. + \ С). + Process.env (. + \ С) + / г

Каждый из них соответствует целому объявлению объекта, как и ожидалось, но в Узле он заменит:

  • ничего, оставляет все как есть
  • первая строка (const dbconfig = {
  • все строки, которые содержат process.env, но оставляют остальные

Я понятия не имею, почему я получу разные результаты и почему это не получится. Любые предложения приветствуются!

Edit: Извините, недостаточно подробно включены. Под заменой я подразумеваю замену пустой строки ''. Я читаю в файлах массив в цикле имен каталогов, как это:

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'));

Раньше я выполнял замену строки самостоятельно, но потом для простоты я использовал jsut для замены пакета npm в файле / на случай, если я что-то там заполнил. И да, я понимаю, что этот код в настоящее время немного запутан и неэффективен, это всего лишь итерации попытки получить базовое достижение желаемого результата.

1 Ответ

0 голосов
/ 05 июля 2019

Я до сих пор не знаю, почему я понял бы разницу между онлайн-сборщиком / тестером регулярных выражений и Node, но вот, пожалуйста.У меня сейчас есть рабочая реализация:

/(.*\s*).+process\.env(.*\s*)*?\}\s*\}/gm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...