in src/scanner.ts [1146:1186]
private scanRegExpBody(): string {
let ch = this.source[this.index];
assert(ch === '/', 'Regular expression literal must start with a slash');
let str = this.source[this.index++];
let classMarker = false;
let terminated = false;
while (!this.eof()) {
ch = this.source[this.index++];
str += ch;
if (ch === '\\') {
ch = this.source[this.index++];
// https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals
if (Character.isLineTerminator(ch.charCodeAt(0))) {
this.throwUnexpectedToken(Messages.UnterminatedRegExp);
}
str += ch;
} else if (Character.isLineTerminator(ch.charCodeAt(0))) {
this.throwUnexpectedToken(Messages.UnterminatedRegExp);
} else if (classMarker) {
if (ch === ']') {
classMarker = false;
}
} else {
if (ch === '/') {
terminated = true;
break;
} else if (ch === '[') {
classMarker = true;
}
}
}
if (!terminated) {
this.throwUnexpectedToken(Messages.UnterminatedRegExp);
}
// Exclude leading and trailing slash.
return str.substr(1, str.length - 2);
}