Скрипт Nodejs для раскомментирования некоторых строк кода или замены комментария содержимым из файла - PullRequest
0 голосов
/ 28 декабря 2018

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

IN

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

OUT

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,
});

1 Ответ

0 голосов
/ 29 декабря 2018

рабочий кодекс (включая дополнительные комментарии к блоку и т. Д.): 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.log(newcontent);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...