import Foundation
let pattern = ##"^(([a-zA-Z0-9\|\!\._\-\s\:]*<a href=\"#\" onclick=\"ON_CLICK_EVENT\">[a-zA-Z0-9\|\!\._\-]*<\/a>)|(<a href=\"#\" on(c|C)lick=\"(HSBC_pre_chat_est\(\)\;\s)*ON_CLICK_EVENT\"(\s)*>(\s)*<img src=(\'|\")[a-zA-Z0-9\|\!\._\-\:\,\/\s]*(\'|\")(\s)*(\/)*>(\s)*<\/a>)|(<a href=\"#\" onclick='try \{ LPButtonClicked\(\)\; \} catch \(e\) \{\}\; ON_CLICK_EVENT'\; title=\"Start Live Chat\"><img src=\"[a-zA-Z0-9\|\!\._\-\:\,\/\s]*\" border=0 alt=\"Live Chat\" onload=\"LPButtonDisplayed\(\)\"><\/a>)|([a-zA-Z0-9\|\!\._\-\s]*<a href=\"#\" onclick=(\'|\")ON_CLICK_EVENT(\'|\")><span><span class=\"lpStartChat\">[a-zA-Z0-9\|\!\._\-\s]*<\/span><\/span><\/a>)|(<a href='javascript\:\;' on(c|C)lick='javascript\:ON_CLICK_EVENT\;'>(\s)*<img src='[a-zA-Z0-9\|\!\._\-\:\,\/\s]*'(\s)*(border='0'\salt='Chat with an HSBC Representative' title='Chat with an HSBC Representative')*(\/)*>(\s)*<\/a>)|(<a href='#' onClick='javascript\:ON_CLICK_EVENT\; '>[a-zA-Z0-9\|\!\._\-\s]*<\/a>)|(<h4>Live Chat<\/h4>(\s)*<div class=\"supportContentGeneralBoxInnerChat\">(\s)*<h5>Welcome to Live Chat<\/h5>(\s)*<p>How can we help you\?<\/p>(\s)*<p><a class=\"redBtn liveChatBtn\" href=\"#\"(\s)*onclick=\"ON_CLICK_EVENT\" title=\"Start Chat\"><span>Start Chat<\/span><\/a><\/p>(\s)*<\/div>)|(<div style='padding\:0px' box-shadow\: -3px 3px 10px(\s)*#888888\;><a href=\"#\" onClick='ON_CLICK_EVENT\;'target=\"_self\">(\s)*<img src='[a-zA-Z0-9\|\!\._\-\:\,\/\s]*'(\s)*id='SwitchButton' Border='0'\/><\/a><\/div>)|(<div id=\"lpButtonTab\" style=\"float:left; width:30px\" onclick=\"lpStickyButton\.toggleState\(\);\"><img src=\"[a-zA-Z0-9\|\!\._\-\:\,\/\s]*\" width=\"30\" height=\"125\" border=\"0\" \/><\/div>(\s)*<div id=\"lpButtonArea\" style=\"margin-left:30px; width:251px\"><img src='[a-zA-Z0-9\|\!\._\-\:\,\/\s]*' style='cursor:pointer' onclick='ON_CLICK_EVENT' \/><\/div>)|(<div class=\"liveChatSideBox\">(\s)*<h2>Live chat<\/h2>(\s)*<p>Welcome to Live Chat\. How can we help you\?<\/p>(\s)*<p><a class=\"redBtn liveChatBtn\" href=\"#\"(\s)*onclick=\"ON_CLICK_EVENT\"(\s)*title=\"Start Chat\"><span>Start Chat<\/span><\/a><\/p>(\s)*<\/div>))$"##
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = ##"""
<div class="liveChatSideBox">
<h2>Live chat</h2>
<p>Welcome to Live Chat. How can we help you?</p>
<p><a class="redBtn liveChatBtn" href="#" onclick="ON_CLICK_EVENT"
title="Start Chat"><span>Start Chat</span></a></p> </div>
<a href="#" onclick="ON_CLICK_EVENT" >
<img src='https://www.hsbc.co.uk/content_static/en/images/en/alt_design_3E.png' />
</a>
"""##
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