import Foundation
let pattern = #"(?<variable><variable.+?source=[\\]*"(?<source>.*?)[\\]*".*?>.*?<\/variable>)"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"customtracking=\"[{"name":"utm_source","value":"Loopify"},{"name":"utm_campaign","value":""},{"name":"utm_medium","value":"Page"},{"name":"utm_content","value":"<variable contenteditable=\\"false\\" name=\\"link type\\" source=\\"campaign.linkType\\" placeholder=\\"\\" date-locale=\\"\\" date-format=\\"\\">link type</variable>"}]\" class=\"loopify-link\">aliquam</a>, lobortis ante eu, consectetur nulla. Sed vitae posuere purus. Vivamus pretium et ipsum vel pretium. Nunc elementum tempus magna id iaculis.","button1":"Google","button2":"Read more"},"link1":{"type":"website","url":"https://www.google.com","uuid":"1a61717c-a686-4683-450c-5fa775b74b6f","target":"_blank","title":"","customTracking":[{"name":"utm_source","value":"Loopify"},{"name":"utm_campaign","value":"<variable contenteditable=\"false\" name=\"campaign name\" source=\"campaign.campaignName\" placeholder=\"\" date-locale=\"\" date-format=\"\">campaign name</variable>"},{"name":"utm_medium","value":"Page"},{"name":"utm_content","value":"<variable contenteditable=\"false\" name=\"link type\" source=\"campaign.linkType\" placeholder=\"\" date-locale=\"\" date-format=\"\">link type</variable>"}]}"#
let stringRange = NSRange(location: 0, length: testString.utf16.count)
let matches = regex.matches(in: testString, range: stringRange)
var result: [[String]] = []
for match in matches {
var groups: [String] = []
for rangeIndex in 1 ..< match.numberOfRanges {
let nsRange = match.range(at: rangeIndex)
guard !NSEqualRanges(nsRange, NSMakeRange(NSNotFound, 0)) else { continue }
let string = (testString as NSString).substring(with: nsRange)
groups.append(string)
}
if !groups.isEmpty {
result.append(groups)
}
}
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