JSVerbalExpressions
JSVerbalExpressions copied to clipboard
Bug when `or` is used with `endOfLine`
For example,
const regex = VerEx().startOfLine().then('abc').or().then('def').endOfLine();
throws the following error
SyntaxError {
message: 'Invalid regular expression: /^(?:(?:abc))|(?:(?:def)$/: Unterminated group',
}
This traces to how _suffixes
is handled.
or(value) {
// ...
this._suffixes = `)${this._suffixes}`;
// ...
}
endOfLine(enable = true) {
this._suffixes = enable ? '$' : '';
// ...
}
When endOfLine
is used after or
, the initial close paren introduced by or
is erased.
I could take a shot at fixing this. How do we want the above example to be interpreted, as /^(?:abc|def)$/gm
or as /^(?:abc|def$)/gm
? Now that I think of it, this might have been a feature and not a bug due to this ambiguity. If so, it should be documented.