Javascript
3 mo. ago
Parses a semicolon-separated string of contact entries from an expanded Outlook distribution list into a CSV format.
import fs from "fs";
const input = `Abercrombie, Clarence L. <AbercrombieCL@email.com>; Abushawish, Maysaa Z <abushawishmz@email.com>; Adams, Benjamin <adamsbj@email.com>; Anderson, A.K. <AndersonAK@email.com>; Bond, Sr., Jamie <bondje@email.com>; Castilla Candil, Luis <castillacandillm@email.com>; Castillo-Bernal, Melba <castillobernalmd@email.com>; Chang, Shun-Yao <changs@email.com>; Chou, Yi Jou <chouy@email.com>; Crouse, Sr, Jake W. <crousejw@email.com>; Richards, Jr., Robert C <RichardsRC1@email.com>`;
function parseOutlookGroupToCsv() { const lines = input .split(";") .map((entry) => entry.trim()) .filter(Boolean) .map((entry) => entry.replace(/\b(Jr\.?|Sr\.?|II|III|IV|V),?/gi, "").trim()) .map((entry) => { const match = entry.match(/^(.*?),\s*(.*?)\s*<([^>]+)>$/); if (!match) return null;
let [_, lastName, firstPart, email] = match; if (/test/i.test(email)) return null;
let nameParts = firstPart.split(/\s+/);
if (nameParts.every((p) => /^[A-Z](\.?)$/.test(p))) { return `${lastName},${nameParts.join(" ")},${email}`; }
nameParts = nameParts.filter((p) => !/^[A-Z]\.?$/.test(p)); const firstName = nameParts.join(" "); return `${lastName},${firstName},${email}`; }) .filter(Boolean);
return ["lastName,firstName,email", ...lines].join("\n");}
const csv = parseOutlookGroupToCsv();fs.writeFileSync("output.csv", csv);