Adding 'putback', ' special case where the end of a match parameter, outside a specified regexp, shouldn't be consumed.
This commit is contained in:
parent
b43f34afa8
commit
18811ef276
|
@ -101,17 +101,20 @@
|
||||||
throw new Error("Could not parse '" + this.input + "'.");
|
throw new Error("Could not parse '" + this.input + "'.");
|
||||||
};
|
};
|
||||||
|
|
||||||
ReParse.prototype.match = function(pattern) {
|
ReParse.prototype.match = function(pattern, putback) {
|
||||||
var probe;
|
var probe;
|
||||||
|
if (putback == null) {
|
||||||
|
putback = false;
|
||||||
|
}
|
||||||
probe = this.input.match(pattern);
|
probe = this.input.match(pattern);
|
||||||
if (!probe) {
|
if (!probe) {
|
||||||
return this.fail();
|
return this.fail();
|
||||||
}
|
}
|
||||||
this.input = this.input.substr(probe[0].length);
|
this.input = this.input.substr(((probe[1] != null) && putback ? probe[1].length : probe[0].length));
|
||||||
if (probe[1] === undefined) {
|
if (probe[1] != null) {
|
||||||
return probe[0];
|
|
||||||
} else {
|
|
||||||
return probe[1];
|
return probe[1];
|
||||||
|
} else {
|
||||||
|
return probe[0];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -75,11 +75,11 @@ exports.ReParse = class ReParse
|
||||||
#
|
#
|
||||||
# Note that the `return fail()` call eventually leads to a throw.
|
# Note that the `return fail()` call eventually leads to a throw.
|
||||||
|
|
||||||
match: (pattern) =>
|
match: (pattern, putback = false) =>
|
||||||
probe = @input.match pattern
|
probe = @input.match pattern
|
||||||
return @fail() unless probe
|
return @fail() unless probe
|
||||||
@input = @input.substr probe[0].length
|
@input = @input.substr (if probe[1]? and putback then probe[1].length else probe[0].length)
|
||||||
if probe[1] is `undefined` then probe[0] else probe[1]
|
if probe[1]? then probe[1] else probe[0]
|
||||||
|
|
||||||
# Attempts to apply the method and produce a value. If it fails,
|
# Attempts to apply the method and produce a value. If it fails,
|
||||||
# restores the input to the previous state.
|
# restores the input to the previous state.
|
||||||
|
|
Loading…
Reference in New Issue