Breaks out a phone number input into the following named segments:
Opt? Matches Name Desc
Y (+ - . :space:) LEADING_PUNCT Leading Punctuation
Y 1-3 Digits (0-9) COUNTRY_CODE International country code (US: '1')
Y (- . :space:) OPT_DELIM_1 Delimiting Punctuation
Y 1-3 Digits (0-9) AREA_CODE Area Code/Regional Routing Code
Y (- . :space:) OPT_DELIM_2 Delimiting Punctuation
N 3 Digits (0-9) PREFIX Number Prefix (First 3 Numbers)
Y (- . :space:) OPT_DELIM_3 Delimiting Punctuation
N 4 Digits (0-9) SUFFIX Number Suffix (Last 4 Numbers)
Because the groups are named ((?<NAME_OF_GROUP>...)
), this is expected to be used with the matchAll method on the String prototype in JS (MDN: String.prototype.matchAll()):
const StringToParse = "(213) 555-1212";
[...StringToParse.matchAll(RegexExpressionFromThisEntry)][0].groups
// Result: {
// OPT_DELIM_1: '(',
// AREA_CODE: '213',
// OPT_DELIM_2: ') ',
// PREFIX: '555',
// OPT_DEMLIM_3: '-',
// SUFFIX: '1212'
//}
Note: If your country has a format I've not addressed, please let me know!