Fix extract_first_email_addr() to really return the first email

The use of find_all() in extract_email_addrs_vec() extracted occurrences
to an intermediate set and thus lost any sense of ordering.

This changes extract_email_addrs_vec() to use find_all_ordered() and
return all occurrences of email addresses found in the argument,
included duplicates, with their order of occurrence preserved.
This commit is contained in:
Jon Siwek 2020-08-06 18:08:20 -07:00 committed by Tim Wojtulewicz
parent a852ab4c39
commit 170752fa99
5 changed files with 47 additions and 4 deletions

View file

@ -8,9 +8,9 @@ function extract_email_addrs_vec(str: string): string_vec
{
local addrs: vector of string = vector();
local raw_addrs = find_all(str, /(^|[<,:[:blank:]])[^<,:[:blank:]@]+"@"[^>,;[:blank:]]+([>,;[:blank:]]|$)/);
for ( raw_addr in raw_addrs )
addrs += gsub(raw_addr, /[<>,:;[:blank:]]/, "");
local raw_addrs = find_all_ordered(str, /(^|[<,:[:blank:]])[^<,:[:blank:]@]+"@"[^>,;[:blank:]]+([>,;[:blank:]]|$)/);
for ( i in raw_addrs )
addrs += gsub(raw_addrs[i], /[<>,:;[:blank:]]/, "");
return addrs;
}