#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?msx) # begin capture group 1" & @CRLF & _
"\{\s+"name":[ ]" # match '{' then 1+ whitespace chars, then '"name": "" & @CRLF & _
"(\w+) # match 1+ word chars, save to capture group 1" & @CRLF & _
"- # match '-'" & @CRLF & _
"(\w+) # match 1+ word chars, save to capture group 2" & @CRLF & _
"- # match '-'" & @CRLF & _
"(\w+) # match 1+ word chars, save to capture group 3" & @CRLF & _
"- # match '-'" & @CRLF & _
"(\w+) # match 1+ word chars, save to capture group 4" & @CRLF & _
"( # begin capture group 5" & @CRLF & _
" ",\s+"units":[ ] # match '",', then 1+ whitespaces then '"units": '" & @CRLF & _
" "\w+" # match 1+ word chars" & @CRLF & _
" ,\s+"value":[ ] # match ',', then 1+ whitespaces then '"value": '" & @CRLF & _
" \d+ # match 1+ digits" & @CRLF & _
" \s+\} # match 1+ whitespaces then '"units": '" & @CRLF & _
") # end capture group 5" & @CRLF & _
" # end capture group 1" & @CRLF & _
"(?! # begin negative lookahead" & @CRLF & _
" .* # match 0+ chars" & @CRLF & _
" \{\s+"name":[ ]" # match '{' then 1+ whitespace chars then '"name": ' then '"'" & @CRLF & _
" \1_ # match contents of capture group 1 then '_'" & @CRLF & _
" \2_ # match contents of capture group 2 then '_'" & @CRLF & _
" \3_ # match contents of capture group 3 then '_'" & @CRLF & _
" \4 # match contents of capture group 4" & @CRLF & _
" \5 # match contents of capture group 5" & @CRLF & _
") # end of negative lookahead " & @CRLF & _
"| # or" & @CRLF & _
"\{\s+"name":[ ]" # match '{' then 1+ whitespace chars, then '"name": "" & @CRLF & _
"\w+ # match 1+ word chars" & @CRLF & _
"_ # match '_'" & @CRLF & _
"\w+ # match 1+ word chars" & @CRLF & _
"_ # match '_'" & @CRLF & _
"\w+ # match 1+ word chars" & @CRLF & _
"_ # match '_'" & @CRLF & _
"\w+ # match 1+ word chars" & @CRLF & _
"(?5) # execute code constructing capture group 6" & @CRLF & _
""
Local $sString = "{" & @CRLF & _
" "body": {" & @CRLF & _
" "metricsArray": [" & @CRLF & _
" {" & @CRLF & _
" "name": "free-aa-bb2-123x123Profiles"," & @CRLF & _
" "units": "profiles"," & @CRLF & _
" "value": 14" & @CRLF & _
" }," & @CRLF & _
" {" & @CRLF & _
" "name": "free_aa_bb2_123x123Profiles"," & @CRLF & _
" "units": "profiles"," & @CRLF & _
" "value": 14" & @CRLF & _
" }" & @CRLF & _
" ]," & @CRLF & _
" "name": "regionxxx"," & @CRLF & _
" "timeStamp": "2022-01-20T04:58:29.875Z"" & @CRLF & _
" }" & @CRLF & _
"}" & @CRLF & _
""
Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYGLOBALFULLMATCH)
Local $aFullArray[0]
For $i = 0 To UBound($aArray) -1
_ArrayConcatenate($aFullArray, $aArray[$i])
Next
$aArray = $aFullArray
; Present the entire match result
_ArrayDisplay($aArray, "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 AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm