@visulima/string
Version:
Functions for manipulating strings.
2 lines (1 loc) • 2.74 kB
JavaScript
;var y=Object.defineProperty;var $=(l,c)=>y(l,"name",{value:c,configurable:!0});var S=Object.defineProperty,b=$((l,c)=>S(l,"name",{value:c,configurable:!0}),"A");const A=b(l=>{if(l.length===0)return[];const c=[];let p=[...l[0]];for(let o=1;o<l.length;o++){const d=l[o];d&&d[0]<=p[1]+1?p[1]=Math.max(p[1],d[1]):(c.push(p),p=[...d])}return c.push(p),c},"mergeIntervals"),E=b((l,c,p)=>{if(!l)return"";const o=[];let d=0;for(const e of c){if(!e||e.length<2)continue;const[t,n]=e;if(n!==void 0)try{if(t instanceof RegExp){const a=new RegExp(t.source,`${t.flags.replace("g","")}g`);let s;for(;(s=a.exec(l))!==null;){const i=s.index,h=s[0];h.length===0&&a.lastIndex===s.index&&(a.lastIndex+=1);const I=i+h.length-1,M=n.replaceAll(/\$([\d&$`'])/g,(R,f)=>{if(f==="&")return h;if(f==="$")return"$";if(f==="`")return l.slice(0,Math.max(0,i));if(f==="'")return l.slice(Math.max(0,i+h.length));const u=Number.parseInt(f,10);return s&&u>0&&u<s.length?s[u]??"":R});o.push({end:I,id:d++,original:h,replacement:M,start:i}),h.length===0&&a.lastIndex===i&&(a.lastIndex+=1)}}else if(typeof t=="string"&&t.length>0)for(let a=0;(a=l.indexOf(t,a))!==-1;a++){const s=a,i=t,h=s+i.length-1,I=Object.assign([i],{index:s,input:l}),M=n.replaceAll(/\$(\d+|&|\$)/g,(R,f)=>{if(f==="&")return i;if(f==="$")return"$";const u=Number.parseInt(f,10);return I&&u>0&&u<I.length?I[u]??"":R});o.push({end:h,id:d++,original:i,replacement:M,start:s})}else continue}catch{continue}}o.sort((e,t)=>e.start!==t.start?e.start-t.start:t.end-e.end);const v=[...p].sort((e,t)=>e[0]-t[0]),B=A(v),r=l.split("").map((e,t)=>({appliedMatchId:null,char:e,index:t,insertBeforeReplacement:null,isIgnored:!1,isMatchStart:!1,matchReplacement:null}));for(const e of B)for(let t=e[0];t<=e[1];t++)r[t]&&(r[t].isIgnored=!0);let x="";for(const e of o)if(e.original.length===0&&e.start>=0&&e.start<=r.length){const t=e.start;if(r[t]){const n=r[t];n.isIgnored||(n.insertBeforeReplacement=(n.insertBeforeReplacement??"")+e.replacement)}else t===r.length&&(x+=e.replacement)}for(const e of o){if(e.original.length===0)continue;let t=!0;for(let n=e.start;n<=e.end;n++)if(!r[n]||r[n].isIgnored||r[n].appliedMatchId!==null){t=!1;break}if(t&&e.start>=0&&e.start<r.length){for(let n=e.start;n<=e.end;n++)r[n]&&(r[n].appliedMatchId=e.id);r[e.start]&&(r[e.start].isMatchStart=!0,r[e.start].matchReplacement=e.replacement)}}let m="",g=0;for(;g<r.length;){const e=r[g];if(e.insertBeforeReplacement!==null&&(m+=e.insertBeforeReplacement),e.isMatchStart&&e.appliedMatchId!==null){m+=e.matchReplacement??"";let t=g;for(let n=g+1;n<r.length&&r[n]?.appliedMatchId===e.appliedMatchId;n++)t=n;g=t+1}else e.appliedMatchId===null&&(m+=e.char),g+=1}return x.length>0&&(m+=x),m},"replaceString");module.exports=E;