named-regexp-groups
Version:
Regular expressions with named capture groups and named back-references
7 lines (6 loc) • 2.6 kB
JavaScript
;function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}Object.defineProperty(exports,"__esModule",{value:!0});
/*!
* @copyright 2017- Commenthol
* @license
*/
var r=/([a-zA-Z_$][a-zA-Z_$0-9]{0,50})/,n=new RegExp("\\$\\+{".concat(r.source,"}"),"g"),o=new RegExp("^[?:]&".concat(r.source)),u=new RegExp("^[?:]<".concat(r.source,">([^]*)")),s=/([\\]?[()])/g,a=/\(\)/g;var c=function(r,c,i,p){function l(e,t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l);var r=function(e,t){var r={},n={};(e=e||"")instanceof RegExp&&((t=t||e.flags||"")||(e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.global&&(t+="g")),e=e.source);var c={count:0,groups:[""],names:[]},i=0,p=e.split(s);return{source:p.map((function(e,t){var s,a;switch(e){case"(":c.groups.push(""),c.names.push("");break;case")":a=c.groups.pop(),(s=c.names.pop())&&(n[s]=a.substr(1));break;default:"("===p[t-1]&&!/^\?[:!=]/.test(e)&&(i++,(s=u.exec(e))&&s[1]?(r[s[1]]?r[c.count++]=i:(c.names[c.names.length-1]=s[1],r[s[1]]=i),e=s[2]||"",")"!==p[t+1]||s[2]||(e="[^]+")):r[c.count++]=i,(s=o.exec(e))&&s[1]&&(e=n[s[1]]||""))}return c.groups=c.groups.map((function(t){return t+e})),e})).join("").replace(a,""),flags:t,groups:r,named:n}}(e,t);this.regex=new RegExp(r.source,r.flags),this.source=this.regex.source,this.groups=r.groups}var f,g,y;return f=l,(g=[{key:"exec",value:function(e){var t=this,r=this.regex.exec(e);return r&&(r.groups={},Object.keys(this.groups).forEach((function(e){r.groups[e]=r[t.groups[e]]}))),r}},{key:"test",value:function(e){return this.regex.test(e)}},{key:"toString",value:function(){return this.regex.toString()}},{key:r,value:function(t,r){var o=this,u=r;switch(e(u)){case"string":u=u.replace(n,(function(e,t){var r=o.groups[t];return null==r?"":"$"+o.groups[t]}));break;case"function":u=r.bind(this);break;default:return String(u)}return t.replace(this.regex,u)}},{key:c,value:function(e){return this.exec(e)}},{key:i,value:function(e){return e.split(this.regex)}},{key:p,value:function(e){return e.search(this.regex)}}])&&t(f.prototype,g),y&&t(f,y),Object.defineProperty(f,"prototype",{writable:!1}),l}(Symbol.replace,Symbol.match,Symbol.split,Symbol.search);exports.default=c,module.exports=exports.default;