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