Как 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 будет соответствовать только первому вхождению.

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