import * as plugins from './smartstring.plugins'; export class Domain { fullName: string; level1: string; level2: string; level3: string; level4: string; level5: string; protocol: string; zoneName: string; // aliases topLevel: string; domainName; subDomain; constructor(domainStringArg: string) { let regexMatches = domainRegex(domainStringArg); this.fullName = ''; for (let i = 1; i <= 5; i++) { if (regexMatches[i - 1]) { let localMatch = regexMatches[i - 1]; this['level' + i.toString()] = localMatch; if (this.fullName === '') { this.fullName = localMatch; } else { this.fullName = localMatch + '.' + this.fullName; } } else { this['level' + i.toString()] = undefined; } } this.protocol = protocolRegex(domainStringArg); this.zoneName = this.level2 + '.' + this.level1; // aliases this.topLevel = this.level1; this.domainName = this.level2; this.subDomain = this.level3; } } let domainRegex = function(stringArg: string) { let regexString = /([a-zA-Z0-9\-\_]*)\.{0,1}([a-zA-Z0-9\-\_]*)\.{0,1}([a-zA-Z0-9\-\_]*)\.{0,1}([a-zA-Z0-9\-\_]*)\.{0,1}([a-zA-Z0-9\-\_]*)\.{0,1}$/; let regexMatches = regexString.exec(stringArg); regexMatches.reverse(); //make sure we build the domain from toplevel to subdomain (reversed order) regexMatches.pop(); // pop the last element, which is, since we reversed the Array, the full String of matched elements let regexMatchesFiltered = regexMatches.filter(function(stringArg: string) { return stringArg !== ''; }); return regexMatchesFiltered; }; let protocolRegex = function(stringArg: string) { let regexString = /^([a-zA-Z0-9]*):\/\//; let regexMatches = regexString.exec(stringArg); if (regexMatches) { return regexMatches[1]; } else { return undefined; } };