如何使用带有 gulp-replace 的捕获组?

How to use a Capture Group with gulp-replace?

gulp-替换0.5.4

Current 通过 gulp 和 rev:

<link rel="stylesheet" href="assets/styles/app-3c224ff086.css">

目标:

<link rel="stylesheet" href="assets/styles/app-3c224ff086.css" media="screen">

结果:

<link rel="stylesheet" href="" media="screen">

初始测试是:https://regex101.com/r/miM7TN/1。我可能已将测试与 $0 的捕获组相关联,但在我的项目中我使用的是捕获组 1。

在我的 gulp 任务中添加了以下内容:

var regex = /\"assets\/styles\/app-+.*\"/;
var subst = ` media="screen"`;
.pipe(replace(regex, subst))

正在查找我的字符串,包括开始和结束引号。我得到的不是捕获组,而是字面上的 1 美元。如何获取捕获组的实际值? gulp-replace 文档显示了替换值“$1foo”。 SO 上的类似问题显示“$1”和“$1”,我还没有看到我的情况有什么不同。我试过反引号、单引号和双引号。

</code> 反向引用引用 ID 为 1 的捕获组,即使用模式中第一个 <code>(...) 捕获的文本。

您必须使用

 var regex = /("assets\/styles\/app-+.*")/;

对于 </code> 到 "work" 的方式与 <code>$& 相同(对整个匹配值的反向引用)。

您可以使用回调作为 gulp-replace 中的第二个参数。该函数遍历每个捕获组。 这是我将驼峰命名法变量转换为 css 表示法

的示例
.pipe(replace(/([A-Z])/g, function(match){
  return '-'+match.toLowerCase()
}))

{camelCase1: 1, camelCase2: 2}

变成 camel-case1 和 case-case2