Javascript
1 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. <[email protected]>; Abushawish, Maysaa Z <[email protected]>; Adams, Benjamin <[email protected]>; Anderson, A.K. <[email protected]>; Bond, Sr., Jamie <[email protected]>; Castilla Candil, Luis <[email protected]>; Castillo-Bernal, Melba <[email protected]>; Chang, Shun-Yao <[email protected]>; Chou, Yi Jou <[email protected]>; Crouse, Sr, Jake W. <[email protected]>; Richards, Jr., Robert C <[email protected]>`;
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);