4

吞咽替换 0.5.4

当前通过 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="$1" media="screen">

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

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

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

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

4

2 回答 2

1

您可以使用回调作为 gulp-replace 中的第二个参数。该函数在每个捕获组上循环。这是我将 camelCase 变量转换为 css 表示法的示例

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

{camelCase1: 1, camelCase2: 2}

变成骆驼案例1和案例案例2

于 2018-05-09T15:46:00.707 回答
1

$1反向引用指的是 ID 为 1 的捕获组,即使用模式中的第一个捕获的文本(...)

你必须使用

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

以与(对整个匹配值的反向引用)$1相同的方式“工作” 。$&

于 2017-03-08T13:37:47.463 回答