| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- export const balanced = (a, b, str) => {
- const ma = a instanceof RegExp ? maybeMatch(a, str) : a;
- const mb = b instanceof RegExp ? maybeMatch(b, str) : b;
- const r = ma !== null && mb != null && range(ma, mb, str);
- return (r && {
- start: r[0],
- end: r[1],
- pre: str.slice(0, r[0]),
- body: str.slice(r[0] + ma.length, r[1]),
- post: str.slice(r[1] + mb.length),
- });
- };
- const maybeMatch = (reg, str) => {
- const m = str.match(reg);
- return m ? m[0] : null;
- };
- export const range = (a, b, str) => {
- let begs, beg, left, right = undefined, result;
- let ai = str.indexOf(a);
- let bi = str.indexOf(b, ai + 1);
- let i = ai;
- if (ai >= 0 && bi > 0) {
- if (a === b) {
- return [ai, bi];
- }
- begs = [];
- left = str.length;
- while (i >= 0 && !result) {
- if (i === ai) {
- begs.push(i);
- ai = str.indexOf(a, i + 1);
- }
- else if (begs.length === 1) {
- const r = begs.pop();
- if (r !== undefined)
- result = [r, bi];
- }
- else {
- beg = begs.pop();
- if (beg !== undefined && beg < left) {
- left = beg;
- right = bi;
- }
- bi = str.indexOf(b, i + 1);
- }
- i = ai < bi && ai >= 0 ? ai : bi;
- }
- if (begs.length && right !== undefined) {
- result = [left, right];
- }
- }
- return result;
- };
- //# sourceMappingURL=index.js.map
|