Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80559 views
1
module.exports = balanced;
2
function balanced(a, b, str) {
3
var bal = 0;
4
var m = {};
5
var ended = false;
6
7
for (var i = 0; i < str.length; i++) {
8
if (a == str.substr(i, a.length)) {
9
if (!('start' in m)) m.start = i;
10
bal++;
11
}
12
else if (b == str.substr(i, b.length) && 'start' in m) {
13
ended = true;
14
bal--;
15
if (!bal) {
16
m.end = i;
17
m.pre = str.substr(0, m.start);
18
m.body = (m.end - m.start > 1)
19
? str.substring(m.start + a.length, m.end)
20
: '';
21
m.post = str.slice(m.end + b.length);
22
return m;
23
}
24
}
25
}
26
27
// if we opened more than we closed, find the one we closed
28
if (bal && ended) {
29
var start = m.start + a.length;
30
m = balanced(a, b, str.substr(start));
31
if (m) {
32
m.start += start;
33
m.end += start;
34
m.pre = str.slice(0, start) + m.pre;
35
}
36
return m;
37
}
38
}
39
40