36 lines
781 B
JavaScript
36 lines
781 B
JavaScript
var Splitter = function Splitter (separator) {
|
|
this.separator = separator;
|
|
};
|
|
|
|
Splitter.prototype.split = function (value) {
|
|
if (value.indexOf(this.separator) === -1)
|
|
return [value];
|
|
|
|
if (value.indexOf('(') === -1)
|
|
return value.split(this.separator);
|
|
|
|
var level = 0;
|
|
var cursor = 0;
|
|
var lastStart = 0;
|
|
var len = value.length;
|
|
var tokens = [];
|
|
|
|
while (cursor++ < len) {
|
|
if (value[cursor] == '(') {
|
|
level++;
|
|
} else if (value[cursor] == ')') {
|
|
level--;
|
|
} else if (value[cursor] == this.separator && level === 0) {
|
|
tokens.push(value.substring(lastStart, cursor));
|
|
lastStart = cursor + 1;
|
|
}
|
|
}
|
|
|
|
if (lastStart < cursor + 1)
|
|
tokens.push(value.substring(lastStart));
|
|
|
|
return tokens;
|
|
};
|
|
|
|
module.exports = Splitter;
|