Как использовать Capture Group с gulp-replace?

Глоток замени 0.5.4

Ток через глоток и оборот:

<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.

В мое задание глотка добавлено следующее:

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

Моя строка, включая начальные и конечные кавычки, находится в поиске. Вместо группы захвата я получаю буквальный 1 доллар. Как получить фактическое значение группы захвата? Документация gulp-replace показывает значение замены '$1foo'. Подобные вопросы по SO показывают "$1" и "$1", и я пока не вижу разницы в моей ситуации. Я пробовал обратную галочку, одинарные и двойные кавычки.

2 ответа

Решение

$1 обратная ссылка относится к группе захвата с идентификатором 1, текст, захваченный с первым (...) в вашем образце.

Вы должны использовать

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

за $1 "работать" так же, как $& (обратная ссылка на все значение совпадения).

Вы можете использовать обратный вызов в качестве второго параметра в gulp-replace. Функция была зациклена на каждой группе захвата. Вот пример, где я конвертирую переменные camelCase в нотацию css

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

{camelCase1: 1, camelCase2: 2}

Становится camel-case1 и case-case2

Другие вопросы по тегам