@@ -7,6 +7,7 @@ use crate::parser::Options;
77use crate :: parser:: Part ;
88use crate :: parser:: PartModifier ;
99use crate :: parser:: PartType ;
10+ use crate :: parser:: RegexSyntax ;
1011use crate :: parser:: FULL_WILDCARD_REGEXP_VALUE ;
1112use crate :: regexp:: RegExp ;
1213use crate :: tokenizer:: is_valid_name_codepoint;
@@ -42,7 +43,18 @@ impl<R: RegExp> Component<R> {
4243 let ( regexp_string, name_list) =
4344 generate_regular_expression_and_name_list ( & part_list, & options) ;
4445 let flags = if options. ignore_case { "ui" } else { "u" } ;
45- let regexp = R :: parse ( & regexp_string, flags) . map_err ( Error :: RegExp ) ;
46+ let mut regexp =
47+ R :: parse ( & regexp_string, flags, false ) . map_err ( Error :: RegExp ) ;
48+ if let Ok ( _) = & regexp {
49+ if R :: syntax ( ) == RegexSyntax :: EcmaScript {
50+ for part in part_list. iter ( ) {
51+ if part. kind == PartType :: Regexp {
52+ regexp =
53+ R :: parse ( & regexp_string, flags, true ) . map_err ( Error :: RegExp ) ;
54+ }
55+ }
56+ }
57+ }
4658 let pattern_string = generate_pattern_string ( & part_list, & options) ;
4759 let matcher = generate_matcher :: < R > ( & part_list, & options, flags) ;
4860 Ok ( Component {
@@ -350,7 +362,8 @@ fn generate_matcher<R: RegExp>(
350362 part_list => {
351363 let ( regexp_string, _) =
352364 generate_regular_expression_and_name_list ( part_list, options) ;
353- let regexp = R :: parse ( & regexp_string, flags) . map_err ( Error :: RegExp ) ;
365+ let regexp =
366+ R :: parse ( & regexp_string, flags, false ) . map_err ( Error :: RegExp ) ;
354367 InnerMatcher :: RegExp { regexp }
355368 }
356369 } ;
0 commit comments