UNPKG

@shhhplus/text-matcher

Version:

This tool can use specified rules to match text.

2 lines (1 loc) 1.63 kB
!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(n="undefined"!=typeof globalThis?globalThis:n||self).createTextMatcher=e()}(this,(function(){"use strict";function n(n,e,t){if(t||2===arguments.length)for(var r,o=0,i=e.length;o<i;o++)!r&&o in e||(r||(r=Array.prototype.slice.call(e,0,o)),r[o]=e[o]);return n.concat(r||Array.prototype.slice.call(e))}var e=function(e,r){if(!e)return[];if(0===r.length)return[e];for(var o=[{done:!1,node:e}],i=function(e){var r=!1;o=o.reduce((function(o,i){if(i.done||r)return n(n([],o,!0),[i],!1);var u=t(i.node,e);return r=u.skipable,n(n([],o,!0),u.tasks,!0)}),[])},u=0,a=r;u<a.length;u++){i(a[u])}var f=o.map((function(n){return n.node})),c=0,l=0;return f.forEach((function(n){"string"==typeof n?l+=n.length:(n.payload.position=l,n.payload.matchIndex=c++,l+=n.text.length)})),f},t=function(n,e){for(var t=[],r=!1,o=0,i=null;null!==(i=e.pattern.exec(n));){var u=i[0],a=i.index;if(a!==o&&t.push({done:!1,node:n.substring(o,a)}),t.push({done:!0,node:{text:u,payload:{position:-1,ruleIndex:e.index,matchIndex:-1}}}),o=a+u.length,!e.pattern.global){r=!0;break}}return o<n.length&&t.push({done:!1,node:n.substring(o)}),{tasks:t,skipable:r}};return function(n){var t=(Array.isArray(n)?n:[n]).map((function(n,e){return[n,e]})).filter((function(n){return n[0]})).map((function(n){return"string"==typeof n[0]?{index:n[1],pattern:new RegExp("".concat(n[0]),"g")}:{index:n[1],pattern:n[0]}})).filter((function(n){var e=n.pattern.source;return e&&e!==new RegExp("").source}));return{exec:function(n){return e(n,t)}}}}));