@@ -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,15 @@ 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 regexp. is_ok ( ) && R :: syntax ( ) == RegexSyntax :: EcmaScript {
49+ for part in part_list. iter ( ) {
50+ if part. kind == PartType :: Regexp {
51+ regexp = R :: parse ( & regexp_string, flags, true ) . map_err ( Error :: RegExp ) ;
52+ }
53+ }
54+ }
4655 let pattern_string = generate_pattern_string ( & part_list, & options) ;
4756 let matcher = generate_matcher :: < R > ( & part_list, & options, flags) ;
4857 Ok ( Component {
@@ -350,7 +359,8 @@ fn generate_matcher<R: RegExp>(
350359 part_list => {
351360 let ( regexp_string, _) =
352361 generate_regular_expression_and_name_list ( part_list, options) ;
353- let regexp = R :: parse ( & regexp_string, flags) . map_err ( Error :: RegExp ) ;
362+ let regexp =
363+ R :: parse ( & regexp_string, flags, false ) . map_err ( Error :: RegExp ) ;
354364 InnerMatcher :: RegExp { regexp }
355365 }
356366 } ;
0 commit comments