constructor() {
        this._input = '';
        this._start = 0;
        this._current = 0;
        this._tokens = [];
        this._errors = [];
        // u - unicode, y - sticky // TODO@ulugbekna: we accept double quotes as part of the string rather than as a delimiter (to preserve old parser's behavior)
        this.stringRe = /[a-zA-Z0-9_<>\-\./\\:\*\?\+\[\]\^,#@;"%\$\p{L}-]+/uy;
    }
A simple scanner for context keys.

Example:

```ts
const scanner = new Scanner().reset('resourceFileName =~ /docker/ && !config.docker.enabled');
const tokens = [...scanner];
if (scanner.errorTokens.length > 0) {
    scanner.errorTokens.forEach(err => console.error(`Unexpected token at ${err.offset}: ${err.lexeme}\nHint: ${err.additional}`));
} else {
    // process tokens
}
```