JSVerbalExpressions icon indicating copy to clipboard operation
JSVerbalExpressions copied to clipboard

Bug when `or` is used with `endOfLine`

Open shreyasminocha opened this issue 5 years ago • 0 comments

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.

shreyasminocha avatar Jul 30 '18 12:07 shreyasminocha