35 lines
982 B
JavaScript
35 lines
982 B
JavaScript
"use strict";
|
|
|
|
const Argument = require('./argument');
|
|
|
|
const TreeRegexp = require('./tree_regexp');
|
|
|
|
const ParameterType = require('./parameter_type');
|
|
|
|
class RegularExpression {
|
|
constructor(expressionRegexp, parameterTypeRegistry) {
|
|
this._expressionRegexp = expressionRegexp;
|
|
this._parameterTypeRegistry = parameterTypeRegistry;
|
|
this._treeRegexp = new TreeRegexp(expressionRegexp);
|
|
}
|
|
|
|
match(text) {
|
|
const parameterTypes = this._treeRegexp.groupBuilder.children.map(groupBuilder => {
|
|
const parameterTypeRegexp = groupBuilder.source;
|
|
return this._parameterTypeRegistry.lookupByRegexp(parameterTypeRegexp, this._treeRegexp, text) || new ParameterType(null, parameterTypeRegexp, String, s => s, false, false);
|
|
});
|
|
|
|
return Argument.build(this._treeRegexp, text, parameterTypes);
|
|
}
|
|
|
|
get regexp() {
|
|
return this._expressionRegexp;
|
|
}
|
|
|
|
get source() {
|
|
return this._expressionRegexp.source;
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = RegularExpression; |