Hum
You might (maybe...) try this, using 0xfffd (replacement character) as "separator"
#Include <Array.au3>
Local $s = "Hello, " & Chr(27) & "[ 40;31mThis is red on black " & chr(13) & _
Chr(27) & "[ 47;32m And this is green on white" & chr(10) & _
Chr(27) & "[ 47 ; 32 m And this is also green on white (more spaces)" & _
Chr(27) & "[1234567890123456798Kvftio this matches the definition," & @TAB & "albeit probably invalid ANSI escape" & _
Chr(27) & "[ 47;32 !!!! this is not an ANSI " & Chr(27) & "sequence" & _
Chr(27) & "[ z but this one is OK and final bell!" & Chr(7)
Local $aRes = StringRegExp($s, "(?x)" & _
"(?(DEFINE) (?<ANSI_Escape> \[ (?:\s*\d*\s*;?)* [[:alpha:]]) )" & _
"(?| \x1B (?&ANSI_Escape) | [\x01-\x1A\x1C-\x1F] | (?:[^\x1B] (?!(?&ANSI_Escape)))+ )", 3)
; _ArrayDisplay($aRes, "Mixed results")
$char = chrw(0xfffd)
$s2 = _ArrayToString($aRes, $char)
$s2 = Execute("'" & StringRegExpReplace($s2, "([\x01-\x1A\x1C-\x1F])", "' & $char & ascw('$1') & '") & "'")
$aRes2 = StringSplit($s2, $char, 2)
_ArrayDisplay($aRes2, "Mixed results2")