Regex Find And Replace

Action ID: regex:replace
NPM Package:

@backstage-community/plugin-scaffolder-backend-module-regex

Description

Replaces strings that match a regular expression pattern with a specified replacement string

Input Schema

PropertyTypeDescriptionRequired
regExpsarray-

Output Schema

No output schema defined for this action.

Usage Examples

Replace template placeholders across multiple files

Use this to replace common placeholders after fetching a starter template and before publishing the repository. It updates multiple files with user-provided values using global regex matches.

Copy
steps:
  - id: fetch-base
    action: fetch:template
    input:
      url: https://github.com/acme/service-template/archive/refs/heads/main.zip
      values:
        serviceName: ${{ parameters.serviceName }}
        serviceSlug: ${{ parameters.serviceSlug }}
        owner: platform-team

  - id: replace-placeholders
    action: regex:replace
    input:
      regExps:
        - files:
            - README.md
            - chart/values.yaml
            - app/src/config.ts
          pattern: "__SERVICE_NAME__"
          replacement: "${{ parameters.serviceName }}"
          flags: "g"

        - files:
            - package.json
          pattern: "\"name\":\\s*\"[^\"]+\""
          replacement: "\"name\": \"@acme/${{ parameters.serviceSlug }}\""
          flags: "g"

        - files:
            - chart/values.yaml
          pattern: "image:\\s+.+/template-service:[^\\s]+"
          replacement: "image: ghcr.io/acme/${{ parameters.serviceSlug }}:${{ parameters.version }}"
          flags: "g"

  - id: publish
    action: publish:github
    input:
      repoUrl: github.com?owner=acme&repo=${{ parameters.serviceSlug }}
      defaultBranch: main
      description: Service ${{ parameters.serviceName }}

Rename Java package and Gradle coordinates with capture groups

Use this to refactor Java package declarations and Gradle metadata across a repo. It demonstrates capture groups, multiline handling, and multiple targeted replacements in one step.

Copy
steps:
  - id: fetch-java-template
    action: fetch:template
    input:
      url: https://github.com/acme/java-service-template/archive/refs/heads/main.zip
      values:
        org: ${{ parameters.org }}
        domain: ${{ parameters.domain }}
        serviceSlug: ${{ parameters.serviceSlug }}

  - id: regex-refactor-java
    action: regex:replace
    input:
      regExps:
        - files:
            - "src/main/java/**/*.java"
            - "src/test/java/**/*.java"
          pattern: "^package\\s+com\\.example(?:\\.(.*))?;"
          replacement: "package com.${{ parameters.org }}.${{ parameters.domain }}$1;"
          flags: "gm"

        - files:
            - build.gradle
          pattern: "group\\s*=\\s*'com\\.example'"
          replacement: "group = 'com.${{ parameters.org }}'"
          flags: "g"

        - files:
            - settings.gradle
          pattern: "rootProject\\.name\\s*=\\s*['\"][^'\"]+['\"]"
          replacement: "rootProject.name = '${{ parameters.serviceSlug }}'"
          flags: "g"

  - id: publish-gitlab
    action: publish:gitlab
    input:
      repoUrl: gitlab.com?owner=acme&repo=${{ parameters.serviceSlug }}
      defaultBranch: main
      description: Java service ${{ parameters.serviceSlug }}