const regex = /(\n|\s)(?:(?:\+?(\d{1}|\d{2}|\d{3})\s*)\s*(?:\(\s*(\d{1}|\d{2}|\d{3})\s*\)|(\d{1,3}))\s*\-?(?:\(\s*(\d{1,3})\s*\)|(\d{3}))\s*\-?(?:\d{2}\s*\-?\d{2}))/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(\\n|\\s)(?:(?:\\+?(\\d{1}|\\d{2}|\\d{3})\\s*)\\s*(?:\\(\\s*(\\d{1}|\\d{2}|\\d{3})\\s*\\)|(\\d{1,3}))\\s*\\-?(?:\\(\\s*(\\d{1,3})\\s*\\)|(\\d{3}))\\s*\\-?(?:\\d{2}\\s*\\-?\\d{2}))', 'gm')
const str = `
+79996364778 rus
8 (918) 373-6633 rus
+1 650-798-2800 usa
8(949)373-66-55 rus
+7 (961) 859-56-19 rus
+1 205-635-1136 usa
+22(909)333 4334
+7(985)5310868
+79855310868
88008454545
+55 11 99999-5555 Brazil
+593 7 282-3889 Ecuador
(+44) 0848 9123 456 UK
+1 284 852 5500 BVI
+1 345 9490088 Grand Cayman
+32 2 702-9200 Belgium
+65 6511 9266 Asia Pacific
+86 21 2230 1000 Shanghai
+9124 4723300 India
+821012345678 South Korea
And for your extension pleasure
+55 11 99999-5555 ramal 123 Brazil
+55 11 99999-5555 foo786544 Brazil
(?!\\b(0)\\1+\\b)(\\+?\\d{1,3})\\s?\\(?\\d{3}\\)?\\s?([. -]?)\\d{3}\\3\\d{4}`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
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 JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions