regex 匹配特定字符串start和until括号end的正则表达式

fbcarpbf  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(128)

我正在寻找正则表达式,以采取以下字符串,并获得/* start *//* end */之间的选定数据。

import {str}from'envalid';import {buildEnv}from'@leno/core';const { cleanEnv, envalidConfig } = buildEnv(process['APP_ENV'] || process.env, /* start */ {
    CLIENT_URL: str(),
    INITIAL_ACCOUNT_PAGE: str({ default: 'dashboard', devDefault: 'test', desc: 'initial page to redirect after org selection' }),
    APP_NAME: str({ default: 'CDEBase' }),
}/* end */);export{cleanEnv,envalidConfig};//# sourceMappingURL=env-config.js.map

选择的结果应该是

{
    CLIENT_URL: { default: false, devDefault: false },
    INITIAL_ACCOUNT_PAGE: { default: true, devDefault: true },
    APP_NAME: { default: true, devDefault: false },
}
nzk0hqpo

nzk0hqpo1#

这里可能不需要任何正则表达式。常规的indexOf可能就足够了。

const src = `import {str}from'envalid';import {buildEnv}from'@leno/core';const { cleanEnv, envalidConfig } = buildEnv(process['APP_ENV'] || process.env, /* start */ {
    CLIENT_URL: str(),
    INITIAL_ACCOUNT_PAGE: str({ default: 'dashboard', desc: 'initial page to redirect after org selection' }),
    APP_NAME: str({ default: 'CDEBase' }),
}/* end */);export{cleanEnv,envalidConfig};//# sourceMappingURL=env-config.js.map`;

const cleanVersion = src.substring(src.indexOf('/* start */') + 11, src.indexOf('/* end */')).trim();
console.log(cleanVersion);
lb3vh1jj

lb3vh1jj2#

我不清楚默认要求。下面是一个使用3个正则表达式的解决方案,假设如下:

  • 仅使用/* start *//* end */ =〉regex 1中的数据
  • 将空str()替换为{ default: false, devDefault: false } =〉regex 2
  • 提取str(...)内的内容,如果有=〉regex 3
let input = `import {str}from'envalid';import {buildEnv}from'@leno/core';const { cleanEnv, envalidConfig } = buildEnv(process['APP_ENV'] || process.env, /* start */ {
    CLIENT_URL: str(),
    INITIAL_ACCOUNT_PAGE: str({ default: 'dashboard', devDefault: 'test', desc: 'initial page to redirect after org selection' }),
    APP_NAME: str({ default: 'CDEBase' }),
}/* end */);export{cleanEnv,envalidConfig};//# sourceMappingURL=env-config.js.map`;
const regex1 = /^.*?\/\* start \*\/ *(.*?) *\/\* end \*\/.*$/s;
const regex2 = /str\(\)/g;
const regex3 = /str\((\{.*?\})\)/g;
let result = input
  .replace(regex1, '$1')
  .replace(regex2, '{ default: false, devDefault: false }')
  .replace(regex3, '$1');
console.log(result);

输出量:

{
    CLIENT_URL: { default: false, devDefault: false },
    INITIAL_ACCOUNT_PAGE: { default: 'dashboard', devDefault: 'test', desc: 'initial page to redirect after org selection' },
    APP_NAME: { default: 'CDEBase' },
}

正则表达式1的解释:

  • ^-字符串起点处的锚
  • .*?-非贪婪扫描
  • 一米七六
  • *-可选空格
  • (.*?)-使用非贪婪扫描捕获组1,在替换中引用为$1
  • *-可选空格
  • \/\* end \*\/ --
  • .*-贪婪扫描到:
  • $--字符串末端的锚
  • 使用s标志以便.包括换行符

相关问题