@@ -577,23 +577,34 @@ export class PieceTreeBase {
577577
578578 let m : RegExpExecArray | null ;
579579 // Reset regex to search from the beginning
580- searcher . reset ( start ) ;
581580 let ret : BufferCursor = { line : 0 , column : 0 } ;
581+ let searchText : string ;
582+ let offsetInBuffer : ( offset : number ) => number ;
583+
584+ if ( searcher . _wordSeparators ) {
585+ searchText = buffer . buffer . substring ( start , end ) ;
586+ offsetInBuffer = ( offset : number ) => offset + start ;
587+ searcher . reset ( - 1 ) ;
588+ } else {
589+ searchText = buffer . buffer ;
590+ offsetInBuffer = ( offset : number ) => offset ;
591+ searcher . reset ( start ) ;
592+ }
582593
583594 do {
584- m = searcher . next ( buffer . buffer ) ;
595+ m = searcher . next ( searchText ) ;
585596
586597 if ( m ) {
587- if ( m . index >= end ) {
598+ if ( offsetInBuffer ( m . index ) >= end ) {
588599 return resultLen ;
589600 }
590- this . positionInBuffer ( node , m . index - startOffsetInBuffer , ret ) ;
601+ this . positionInBuffer ( node , offsetInBuffer ( m . index ) - startOffsetInBuffer , ret ) ;
591602 let lineFeedCnt = this . getLineFeedCnt ( node . piece . bufferIndex , startCursor , ret ) ;
592603 let retStartColumn = ret . line === startCursor . line ? ret . column - startCursor . column + startColumn : ret . column + 1 ;
593604 let retEndColumn = retStartColumn + m [ 0 ] . length ;
594605 result [ resultLen ++ ] = createFindMatch ( new Range ( startLineNumber + lineFeedCnt , retStartColumn , startLineNumber + lineFeedCnt , retEndColumn ) , m , captureMatches ) ;
595606
596- if ( m . index + m [ 0 ] . length >= end ) {
607+ if ( offsetInBuffer ( m . index ) + m [ 0 ] . length >= end ) {
597608 return resultLen ;
598609 }
599610 if ( resultLen >= limitResultCount ) {
0 commit comments