root / HServer / 00.Server / 00.Program / node_modules / balanced-match / index.js
이력 | 보기 | 이력해설 | 다운로드 (1.15 KB)
1 |
'use strict';
|
---|---|
2 |
module.exports = balanced; |
3 |
function balanced(a, b, str) { |
4 |
if (a instanceof RegExp) a = maybeMatch(a, str); |
5 |
if (b instanceof RegExp) b = maybeMatch(b, str); |
6 |
|
7 |
var r = range(a, b, str);
|
8 |
|
9 |
return r && {
|
10 |
start: r[0], |
11 |
end: r[1], |
12 |
pre: str.slice(0, r[0]), |
13 |
body: str.slice(r[0] + a.length, r[1]), |
14 |
post: str.slice(r[1] + b.length) |
15 |
}; |
16 |
} |
17 |
|
18 |
function maybeMatch(reg, str) { |
19 |
var m = str.match(reg);
|
20 |
return m ? m[0] : null; |
21 |
} |
22 |
|
23 |
balanced.range = range; |
24 |
function range(a, b, str) { |
25 |
var begs, beg, left, right, result;
|
26 |
var ai = str.indexOf(a);
|
27 |
var bi = str.indexOf(b, ai + 1); |
28 |
var i = ai;
|
29 |
|
30 |
if (ai >= 0 && bi > 0) { |
31 |
begs = []; |
32 |
left = str.length; |
33 |
|
34 |
while (i >= 0 && !result) { |
35 |
if (i == ai) {
|
36 |
begs.push(i); |
37 |
ai = str.indexOf(a, i + 1);
|
38 |
} else if (begs.length == 1) { |
39 |
result = [ begs.pop(), bi ]; |
40 |
} else {
|
41 |
beg = begs.pop(); |
42 |
if (beg < left) {
|
43 |
left = beg; |
44 |
right = bi; |
45 |
} |
46 |
|
47 |
bi = str.indexOf(b, i + 1);
|
48 |
} |
49 |
|
50 |
i = ai < bi && ai >= 0 ? ai : bi;
|
51 |
} |
52 |
|
53 |
if (begs.length) {
|
54 |
result = [ left, right ]; |
55 |
} |
56 |
} |
57 |
|
58 |
return result;
|
59 |
} |