Скрипт Nodejs для раскомментирования некоторых строк кода или замены комментария содержимым из файла

Я ищу сценарий nodejs, который заменит IN на OUT ниже.

В

/* api_start ====
app.use('/api',require('./api/api'));
app.use('/sms',require('./api/sms'));
==== api_end */

или

// app.use('/api',require('./api/api'));
// app.use('/sms',require('./api/sms'));

ВНЕ

app.use('/api',require('./api/api'));
app.use('/sms',require('./api/sms'));

В основном просто раскомментирую эти строки кода.


или

просто замените комментарий типа /* api_here */ содержимым из файла, который будет содержать середину из приведенного выше OUT (api.js).

ОБНОВИТЬ

из: https://stackoverflow.com/a/25072070/3066142

Следующее будет работать, если я могу просто написать регулярное выражение, чтобы распознать эту строку. Ниже моя попытка

// require:
var replace = require("replace");

// use:
replace({
    regex: "//\s+app\.use\('/api',require\('\./api/api'\)\);", // string to be replaced
    replacement: "test worked!!", // replacement string
    paths: ['dist/server.js'], // path/to/your/file'
    recursive: true,
    silent: true,
});

Возможно, вы захотите изучить регулярные выражения. Вы можете найти документацию здесь developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

skellertor 28.12.2018 17:37

Вы можете попробовать использовать пакет npm полосы-комментарии.

Austin Gordon 28.12.2018 17:38

Как ни странно, комментарии - это регулярные выражения, хотя в основном все остальное в языках программирования не являются регулярными выражениями.

Patrick Roberts 28.12.2018 17:40

Я недостаточно хорошо знаю регулярное выражение, чтобы писать его сам. Я думаю, что лучшим решением будет заменить комментарий содержимым файла, например, шаблонным скриптом.

Omar 28.12.2018 17:43

Кстати, если бы вы раскомментировали первый пример, вы бы получили api_start ==== app.use('/api',require('./api/api')); app.use('/sms',require('./api/sms')); ==== api_end, а не app.use('/api',require('./api/api')); app.use('/sms',require('./api/sms'));.

Patrick Roberts 28.12.2018 17:47

см. мое обновление исходного вопроса

Omar 28.12.2018 18:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
1 068
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

рабочий код (включая дополнительные комментарии к блокам и т. д.): https://codepen.io/Frederic-Klein/pen/KbXxeB?editors=0012

Пример кода для сопоставления и замены данного примера с использованием регулярных выражений с захватом (...) и не захватывающими группами (?:...) для замен со встроенными пояснениями:

const content = `
/* api_start ====
app.use('/api',require('./api/api'));
app.use('/sms',require('./api/sms'));
==== api_end */
// app.use('/api',require('./api/api'));
// app.use('/sms',require('./api/sms'));
`;

const regex_block_comments = /^/\*.*\n((?:app.*\n)*)(?:.*\*/\n)/gm;
// match lines
// starting with /*
// having the following lines start with app, capture all those lines as one group ($1 reference)
// having a line ending with */ afterwards, as non-capturing group
// repeat globally (g) and match multiline (m) string

const regex_comment = /^//\s*(app.*;\n)/gm;
// match lines
// starting with //
// ignore following whitespaces
// having text "app" afterwards, capture from app to line-ending as group ($1 reference)

const replacement = `$1`;

newcontent = content.replace(regex_block_comments,replacement);
newcontent = newcontent.replace( regex_comment,replacement);

// content after replacements
console.info(newcontent);

Чтобы узнать больше о регулярных выражениях и для построения ваших шаблонов, я рекомендую https://regexr.com/ и https://regex101.com/.

Другие вопросы по теме