import "typings-global" import plugins = require("./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; } }