UNPKG

art-standard-lib

Version:

The Standard Library for JavaScript that aught to be.

148 lines (95 loc) 7.12 kB
// Generated by CoffeeScript 1.12.7 (function() { var RegExpExtensions; module.exports = RegExpExtensions = (function() { var k, lc, ref, v; function RegExpExtensions() {} RegExpExtensions.escapeRegExp = function(string) { var ref; return (ref = string != null ? typeof string.replace === "function" ? string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") : void 0 : void 0) != null ? ref : ''; }; RegExpExtensions.findUrlProtocolRegExp = /([\w-]+)(:\/\/)/; RegExpExtensions.findDomainRegExp = /localhost|[\w]+(?:-[\w]+)*(?:\.[\w]+(?:-[\w]+)*)*(?:\.[a-z]{2,20})|\d+\.\d+\.\d+\.\d+/i; RegExpExtensions.urlQueryParamsRegExp = /(?:[-+=&*._\w]|%[a-f\d]{2})*(?!\.)(?:[-+=&*._\w]|%[a-f\d]{2})/i; RegExpExtensions.findLegalUrlCharacterRegExp = /[-._~!$&'()*+,;=:@\w]|%[a-f\d]{2}/; RegExpExtensions.findUrlPathRegExp = RegExp("(?:\\/(?:(?:" + RegExpExtensions.findLegalUrlCharacterRegExp.source + ")*(?!\\.)(?:" + RegExpExtensions.findLegalUrlCharacterRegExp.source + "))?)*"); RegExpExtensions.findUrlPortRegExp = /(\:)(\d+)/; RegExpExtensions.findUrlFragmentRegExp = RegExp("(\\#)((?:(?:\\?|" + RegExpExtensions.findLegalUrlCharacterRegExp.source + ")*(?!\\.)" + RegExpExtensions.findLegalUrlCharacterRegExp.source + "|))"); /* https://tools.ietf.org/html/rfc3696 terms: local@domain lengths: total: 320 max local: 64 max domain: 255 max 2012 unicode update: https://tools.ietf.org/html/rfc6531 Argued here - make a permissive test: https://news.ycombinator.com/item?id=9089129 So, here is my permissive test: I want something that can reasonably extract emails from random text. no spaces unless escaped or quoted at least something before @ support for quotes (") and escapes (\.) at least one non-space in domain only one '@' Domain must have at least one '.' after a character and before a character Minimum Example: a@a.a */ RegExpExtensions.findEmailLocalRegExp = /((?:[^:@<>\s\n"\\]|\\.)+|"(?:[^@"\\]|\\.)*")/; RegExpExtensions.findEmailRegExp = RegExp(RegExpExtensions.findEmailLocalRegExp.source + "@([^@:?\\s\\n<>.]+\\.[^@:?\\s\\n<>]*[^@:?\\s\\n<>.])", "i"); RegExpExtensions.emailRegExp = RegExp("^" + RegExpExtensions.findEmailRegExp.source + "$", "i"); RegExpExtensions.numberRegExp = /([-]?\.[0-9]+)|([-]?[0-9]+(\.[0-9]+)?)/; RegExpExtensions.urlProtocolRegExp = RegExp("^" + RegExpExtensions.findUrlProtocolRegExp.source + "$", "i"); RegExpExtensions.domainRegExp = RegExp("^" + RegExpExtensions.findDomainRegExp.source + "$", "i"); RegExpExtensions.urlPathRegExp = RegExp("^" + RegExpExtensions.findUrlPathRegExp.source + "$", "i"); RegExpExtensions.urlQueryRegExp = RegExp("^" + RegExpExtensions.urlQueryParamsRegExp.source + "$", "i"); RegExpExtensions.isoDateRegExp = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/; RegExpExtensions.hex16GreyColorRegExp = /^#([a-f0-9])$/i; RegExpExtensions.hex256GreyColorRegExp = /^#([a-f0-9]{2})$/i; RegExpExtensions.hex16ColorRegExp = /^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?$/i; RegExpExtensions.hex256ColorRegExp = /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?$/i; RegExpExtensions.rgbColorRegExp = /rgb *\( *(\d+%?) *, *(\d+%?) *, *(\d+%?) *\)/; RegExpExtensions.rgbaColorRegExp = /rgba *\( *(\d+%?) *, *(\d+%?) *, *(\d+%?) *, *(\d*\.?\d*)\)/; RegExpExtensions.findColorRegExp = RegExp("(" + RegExpExtensions.hex16GreyColorRegExp.source + ")|(" + RegExpExtensions.hex256GreyColorRegExp.source + ")|(" + RegExpExtensions.hex16ColorRegExp.source + ")|(" + RegExpExtensions.hex256ColorRegExp.source + ")|(" + RegExpExtensions.rgbColorRegExp.source + ")|(" + RegExpExtensions.rgbaColorRegExp.source + ")", "i"); RegExpExtensions.colorRegExp = RegExp("^" + RegExpExtensions.findColorRegExp.source + "$"); RegExpExtensions.wordsRegExp = /[^\s]+/g; RegExpExtensions.exactlyOneWordRegExp = /^[^\s]+$/; RegExpExtensions.findUrlOrigin = RegExp("(?:" + RegExpExtensions.findUrlProtocolRegExp.source + ")(" + RegExpExtensions.findDomainRegExp.source + ")?(?:" + RegExpExtensions.findUrlPortRegExp.source + ")?", "i"); /* match OUTPUT: [url, protocol, '://', domain, ':', port, path, '?', query] USAGE: [__, protocol, __, domain, __, port, path, __, query, __, fragment] = str.match findUrlRegExp DESIGN NOTE: The reason why I included the fixed strings ('://', ':' and '?') was so that you can take the matchResult, alter individual elements and create a value url easily by: matchResult.slice(1).join '' */ RegExpExtensions.findUrlRegExp = RegExp(RegExpExtensions.findUrlOrigin.source + "(" + RegExpExtensions.findUrlPathRegExp.source + ")?(?:(\\?)(" + RegExpExtensions.urlQueryParamsRegExp.source + ")?)?(?:" + RegExpExtensions.findUrlFragmentRegExp.source + ")?", "i"); RegExpExtensions.findUrlWithOptionalProtocolRegExp = RegExp("(?:" + RegExpExtensions.findUrlProtocolRegExp.source + ")?(" + RegExpExtensions.findDomainRegExp.source + ")(?:" + RegExpExtensions.findUrlPortRegExp.source + ")?(" + RegExpExtensions.findUrlPathRegExp.source + ")?(?:(\\?)(" + RegExpExtensions.urlQueryParamsRegExp.source + ")?)?(?:" + RegExpExtensions.findUrlFragmentRegExp.source + ")?", "i"); RegExpExtensions.findAllUrlsRegExp = RegExp("" + RegExpExtensions.findUrlRegExp.source, "ig"); RegExpExtensions.findAllUrlsWithOptionalProtocolRegExp = RegExp("" + RegExpExtensions.findUrlWithOptionalProtocolRegExp.source, "ig"); RegExpExtensions.findSourceReferenceUrlRegExp = RegExp(RegExpExtensions.findUrlOrigin.source + "(" + RegExpExtensions.findUrlPathRegExp.source + ")?(?:(\\?)(" + RegExpExtensions.urlQueryParamsRegExp.source + ")?)?(?:\\:(\\d+))?(?:\\:(\\d+))?", "i"); RegExpExtensions.urlRegExp = RegExp("^" + RegExpExtensions.findUrlRegExp.source + "$", "i"); RegExpExtensions.urlWithOptionalProtocolRegExp = RegExp("^" + RegExpExtensions.findUrlWithOptionalProtocolRegExp.source + "$", "i"); ref = RegExpExtensions; for (k in ref) { v = ref[k]; if (!(/RegExp$/.test(k))) { continue; } RegExpExtensions[k.replace(/RegExp/, "Regexp")] = v; RegExpExtensions[k.replace(/RegExp/, "Regex")] = v; } lc = function(s) { return s.toLocaleLowerCase(); }; RegExpExtensions.normalizeUrl = function(url) { var ref1; url = ((ref1 = RegExpExtensions.findUrlProtocolRegExp.exec(url)) != null ? ref1.index : void 0) === 0 ? url : "http://" + url; return url.replace(RegExpExtensions.findDomainRegExp, lc).replace(RegExpExtensions.findUrlProtocolRegExp, lc); }; return RegExpExtensions; })(); }).call(this); //# sourceMappingURL=RegExpExtensions.js.map