如何使用gulp-replace使用Capture组?

时间:2017-03-08 05:38:49

标签: javascript regex gulp-replace

gulp-replace 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”,我还没有看到我的情况有所不同。我试过回字号,单引号和双引号。

2 个答案:

答案 0 :(得分:1)

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

您必须使用

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

for $1 to&#34; work&#34;与$&相同(反向引用整个匹配值)。

答案 1 :(得分:0)

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

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

{camelCase1: 1, camelCase2: 2}

成为camel-case1和case-case2