【问题标题】:Nodejs script to uncomment some lines of code or replace a comment with contents from a file用于取消注释某些代码行或用文件中的内容替换注释的 Nodejs 脚本
【发布时间】:2019-05-26 11:00:20
【问题描述】:

我正在寻找一个 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/…
  • 您可以尝试使用strip-comments npm 包。
  • 令人惊讶的是,cmets 是一个正则表达式,尽管基本上编程语言中的其他所有内容都不是正则表达式。
  • 我不太了解正则表达式,无法自己编写。我认为用模板脚本之类的文件内容替换注释的解决方案是最好的解决方案
  • 顺便说一句,如果您取消注释第一个示例,您最终会得到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'));

标签: javascript node.js regex


【解决方案1】:

工作中的codepen(包括更多的block cmets等):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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2021-07-23
    • 2021-10-27
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多