import Foundation
let pattern = ##"="?(?<currentValue>[^\"\n]*)"? # renovate:(?:[\s]+datasource=[\"\']*(?<datasource>[^\s\"\']*)[\'\"]*|[\s]+depName=[\'\"]*(?<depName>[^\s\'\"]*)[\'\"]*|[\s]+registryUrl=[\'\"]*(?<registryUrl>[^\s\'\"]*)[\'\"]*|[\s]+versioning=[\'\"]*(?<versioning>[^\s\'\"]*)[\'\"]*|[\s]+extractVersion=[\'\"]*(?<extractVersion>[^\s\'\"]*)[\'\"]*)*"##
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = ##"""
# different prefix (shell scripts)
VERSION=0.1.0 # renovate:
DEP_VERSION=0.1.0 # renovate:
# different prefix (makefile)
VERSION?=0.1.0 # renovate:
DEP_VERSION:=0.1.0 # renovate:
# order does not matter
VERSION?=v1.28.0 # renovate: datasource=github-releases registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io datasource=github-releases depName=adrienverge/yamllint versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint datasource=github-releases versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver datasource=github-releases extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver extractVersion=example-v1.1.0 datasource=github-releases
# values can be wrapped between " and '
VERSION?=v1.28.0 # renovate: datasource="github-releases" registryUrl="https://docker.io" depName="adrienverge/yamllint" versioning="semver" extractVersion="example-v1.1.0"
VERSION?=v1.28.0 # renovate: datasource='github-releases' registryUrl='https://docker.io' depName='adrienverge/yamllint' versioning='semver' extractVersion='example-v1.1.0'
VERSION?=v1.28.0 # renovate: datasource="'""'''"github-releases"'""'''" registryUrl="'""'''"https://docker.io"'""'''" depName="'""'''"adrienverge/yamllint"'""'''" versioning="'""'''"semver"'""'''" extractVersion="'""'''"example-v1.1.0"'""'''"
# ignore multiple spaces
VERSION?=v1.28.0 # renovate: datasource=github-releases registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io datasource=github-releases depName=adrienverge/yamllint versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint datasource=github-releases versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver datasource=github-releases extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver datasource=github-releases extractVersion=example-v1.1.0
"""##
let stringRange = NSRange(location: 0, length: testString.utf16.count)
let substitutionString = #"$datasource $registryUrl $depName"#
let result = regex.stringByReplacingMatches(in: testString, range: stringRange, withTemplate: substitutionString)
print(result)
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Swift 5.2, please visit: https://developer.apple.com/documentation/foundation/nsregularexpression