@@ -178,24 +178,17 @@ class RegexParser(pattern: String) {
178178 }
179179
180180 private def parseGroup (): RegexAST = {
181- var captureGroup = if (pos + 1 < pattern.length
181+ val ( captureGroup, lookahead) = if (pos + 1 < pattern.length
182182 && pattern.charAt(pos) == '?'
183- && pattern.charAt(pos+ 1 ) == ':' ) {
184- pos += 2
185- false
186- } else {
187- true
188- }
189- val lookahead = if (pos + 1 < pattern.length
190- && " !=" .contains(pattern.charAt(pos))) {
191- pos += 1
192- captureGroup = false
193- pattern.charAt(pos- 1 ) match {
194- case '=' => Some (RegexPositiveLookahead )
183+ && " :!=" .contains(pattern.charAt(pos+ 1 ))) {
184+ consumeExpected('?' )
185+ (false , consume() match { // exhaustiveness guaranteed by the guard
186+ case ':' => None
195187 case '!' => Some (RegexNegativeLookahead )
196- }
188+ case '=' => Some (RegexPositiveLookahead )
189+ })
197190 } else {
198- None
191+ ( true , None )
199192 }
200193 val term = parseUntil(() => peek().contains(')' ))
201194 consumeExpected(')' )
@@ -1762,8 +1755,8 @@ sealed case class RegexGroup(capture: Boolean, term: RegexAST,
17621755 s " ( ${term.toRegexString}) "
17631756 } else if (lookahead.isDefined) {
17641757 lookahead match {
1765- case Some (RegexPositiveLookahead ) => s " (= ${term.toRegexString}) "
1766- case Some (RegexNegativeLookahead ) => s " (! ${term.toRegexString}) "
1758+ case Some (RegexPositiveLookahead ) => s " (? = ${term.toRegexString}) "
1759+ case Some (RegexNegativeLookahead ) => s " (? ! ${term.toRegexString}) "
17671760 case _ => throw new IllegalStateException (" Should not reach here" )
17681761 }
17691762 } else {
0 commit comments