Как использовать 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