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 } }