【问题标题】:Regex to add extension in specific lines正则表达式在特定行中添加扩展名
【发布时间】:2022-11-03 05:13:42
【问题描述】:

我想添加一个新路径,其名称为从带有 .cjs 扩展名的导入到包含“primereact”的每个导入的最后一个路径。

例如:

import { nanoid } from "nanoid";
import { Button } from "primereact/button";

应该:

import { nanoid } from "nanoid";
import { Button } from "primereact/button/button.cjs";

我想用js替换功能连接正则表达式

string.replace(//g, '');

我有一个正则表达式来查找包含importprimereact 的行,但无法添加带有扩展名的必要文件。

.*(import)+.*(primereact)+.*

【问题讨论】:

  • 您需要在服务器上执行此操作。页面后面的脚本不会更改导入语句
  • 您也可以使用 .htaccess
  • 是的,我知道。我想在提供应用程序之前在构建文件上运行脚本,(为什么有必要这是不同的故事)

标签: javascript regex


【解决方案1】:

以下正则表达式捕获包含 primereact 的每个输入行中的最后一个单词:

(?<=(^|
)import.+?primereact[^/]*/).+?(?=";)

您的示例输入的结果匹配将是:按钮

使用这个匹配,我们可以像下面的伪代码一样添加必要的路径信息:

var regex = "(?<=(^|
)import.+?primereact[^/]*/).+?(?=";)";
foreach (var line in lines)
{
   var match = line.match(regex);
   if (match)
   {
      line = line.replace(regex, match.result + "/" + match.result + ".cjs");
   }
}

【讨论】:

    【解决方案2】:

    const source = `import { nanoid } from "nanoid";
    import { Button } from "primereact/button";
    import { Butter } from "primereact/butter";`
    const regex = /(import.*?from +"primereact/)([^"]+)/g;
    let result = source.replace(regex, (m, g1, g2) => {
      return g1 + g2 + '/' + g2 + '.cjs'; 
    });
    console.log(result);

    输出:

    import { nanoid } from "nanoid";
    import { Button } from "primereact/button/button.cjs";
    import { Butter } from "primereact/butter/butter.cjs";
    

    正则表达式的解释:

    • (import.*?from +"primereact/) -- 使用单词边界捕获组 1 以避免误报
    • ([^"]+) -- 捕获组 2 捕获所有内容,直到双引号
    • 替换函数从捕获组g1g2 组成所需的字符串

    【讨论】:

      【解决方案3】:

      例如,您可以使用带有捕获组的模式,并在替换中使用这些组。

      ^(imports+{[^{}]*} from (["'])primereact/)(.*?)
      

      Regex demo

      const regex = /^(imports+{[^{}]*} from (["'])primereact/)(.*?)/gm;
      const str = `import { nanoid } from "nanoid";
      import { Button } from "primereact/button";`;
      console.log(str.replace(regex, `$1$3/$3.cjs$2`));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-19
        • 1970-01-01
        • 2022-12-18
        • 1970-01-01
        • 2016-09-26
        • 2013-03-18
        • 1970-01-01
        相关资源
        最近更新 更多