String.match
match($regexPattern, $groupNames='') -> string|map
Description
Find the first match for the given regex pattern.
Returns an empty string '' if there is no match.
If there is a match, it will return the matched substring.
'abc 123'.match(rx'abc \d+') //= 'abc 123' 'abc 123'.match(rx'xyz \d+') //= '' // Ignore-case flag 'abc 123'.match(rx'ABC'i) //= 'abc'
Capture Groups
If the regex pattern contains capture groups defined by parens (...), it will return a Map containing the submatch for each group.
Each group of is assigned a number according to where its left paren ( appears in the pattern.
The key full will contain the full outer match.
The key indexOf contains the index position of each group.
$time = 'Time: 08:23 AM'
$m = $time.match(rx'(\d+):(\d+)')
$m[1]      //= '08'
$m[2]      //= '23'
$m.full    //= '08:23'
$m.indexOf //= { 1: 7, 2: 10, full: 7 }
Group Names
If $groupNames is given a pipe-delimited string of names, those will be used instead of numbers.
$time = 'Time: 08:23 AM'
$time.match(rx'(\d+):(\d+)', 'hour|minute')
$m.hour      //= '08'
$m.minute    //= '23'
$m.full      //= '08:23'
$m.indexOf   //= { hour: 7, minute: 10 }
Using match With if
When you call this method in an if statement, you can use the If-Assign := operator to get the returned result and use it inside the block.
$str = 'abc 123'
if $num := $str.match(rx'\d+') {
    print($num)
    //= '123'
}