RegExp.prototype.append = function(re) {
return new RegExp(this.source + re.source, this.flags);
};
var test1 = new RegExp ([
'(?:(?:(https?|ftp):)?\\/\\/)' // protocol
,'(?:([^:\\n\\r]+):([^@\\n\\r]+)@)?' // user:pass
,'(?:(?:www\.)?([^\\/\\n\\r]+))' // domain
,'(\\/[^?\\n\\r]+)?' // request
,'(\\?[^#\\n\\r]*)?' // query
,'(#?[^\\n\\r]*)?' // anchor
].join(''));
var test2 = new RegExp(''
+ /(?:(?:(https?|ftp):)?\/\/)/.source // protocol
+ /(?:([^:\n\r]+):([^@\n\r]+)@)?/.source // user:pass
+ /(?:(?:www\.)?([^\/\n\r]+))/.source // domain
+ /(\/[^?\n\r]+)?/.source // request
+ /(\?[^#\n\r]*)?/.source // query
+ /(#?[^\n\r]*)?/.source // anchor
);
var test3 = new RegExp([
/(?:(?:(https?|ftp):)?\/\/)/ // protocol
,/(?:([^:\n\r]+):([^@\n\r]+)@)?/ // user:pass
,/(?:(?:www\.)?([^\/\n\r]+))/ // domain
,/(\/[^?\n\r]+)?/ // request
,/(\?[^#\n\r]*)?/ // query
,/(#?[^\n\r]*)?/ // anchor
].map(re=>re.source).join(''));
var test4 = /(?:(?:(https?|ftp):)?\/\/)/ // protocol
.append(/(?:([^:\n\r]+):([^@\n\r]+)@)?/) // user:pass
.append(/(?:(?:www\.)?([^\/\n\r]+))/) // domain
.append(/(\/[^?\n\r]+)?/) // request
.append(/(\?[^#\n\r]*)?/) // query
.append(/(#?[^\n\r]*)?/); // anchor