@@ -156,7 +156,7 @@ impl StringOp {
156
156
re_string. push ( '^' ) ;
157
157
158
158
// Handle first character from the input pattern
159
- let mut pattern_chars = right. chars ( ) ;
159
+ let mut pattern_chars = right. chars ( ) . peekable ( ) ;
160
160
let first = pattern_chars. next ( ) ;
161
161
match first {
162
162
Some ( '^' ) => { } // Start of string anchor is already added
@@ -169,7 +169,7 @@ impl StringOp {
169
169
// Escaped previous character should not affect the current.
170
170
let mut prev = first. unwrap_or_default ( ) ;
171
171
let mut prev_is_escaped = false ;
172
- for curr in pattern_chars {
172
+ while let Some ( curr) = pattern_chars. next ( ) {
173
173
match curr {
174
174
'^' => match ( prev, prev_is_escaped) {
175
175
// Start of a capturing group
@@ -183,7 +183,15 @@ impl StringOp {
183
183
_ => re_string. push_str ( r"\^" ) ,
184
184
} ,
185
185
'$' => {
186
- if prev_is_escaped || prev != '\\' {
186
+ if let Some ( '\\' ) = pattern_chars. peek ( ) {
187
+ let backslash = pattern_chars. next ( ) . unwrap_or_default ( ) ;
188
+ match pattern_chars. peek ( ) {
189
+ // End of a capturing group
190
+ Some ( ')' ) => re_string. push ( '$' ) ,
191
+ _ => re_string. push_str ( r"\$" ) ,
192
+ }
193
+ re_string. push ( backslash) ;
194
+ } else if prev_is_escaped || prev != '\\' {
187
195
re_string. push_str ( r"\$" ) ;
188
196
} else {
189
197
re_string. push ( '$' ) ;
0 commit comments