Как gulp-regex-replace только первый матч?
Ниже приведен контент из файла project.json. Я хочу, чтобы первое вхождение значения 'version' было заменено.
{
"title": "Project Title",
"copyright": "Copyright Info",
"description": "Project Description",
"version": "1.0.0",
"buildOptions": {
"xmlDoc": true
},
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
}
}
}
Приведенный ниже код, использующий gulp-regex-replace, изменяет все вхождения значения версии на 1.0.1.
var targetVersion= "1.0.1";
gulp.task('replace', function () {
return gulp.src(['./src/**/project.json'])
.pipe(bom())
.pipe(replace({ regex: '\\n\\s\\s\\"version\\"\\:\\s\\"([0-9a-zA-Z.-]+)\\"', replace: `${targetVersion}` }))
.pipe(gulp.dest('./src'));
});
Как я могу заставить этот код заменить только первое вхождение значения версии?
1 ответ
Решение
gulp-regex-replace
Плагин использует глобальное соответствие: https://github.com/mikrofusion/gulp-regex-replace/blob/master/index.js#L31
Другой аналогичный плагин gulp-replace принимает пользовательский объект регулярного выражения:
replace(/__your_pattern__/, targetVersion);
Без g
Модификатор в шаблоне JS будет соответствовать только первому вхождению.