parse_literal/
parse_literal.rs1#![expect(clippy::print_stdout)]
2use oxc_allocator::Allocator;
14use oxc_regular_expression::{LiteralParser, Options};
15
16fn main() {
18 let allocator = Allocator::default();
19
20 for (pattern_text, flags_text) in [
21 (r"ab", ""),
22 (r"abc", "i"),
23 (r"abcd", "igv"),
24 (r"emo👈🏻ji", "u"),
25 (r"ab|c", "i"),
26 (r"a|b+|c", "i"),
27 (r"a{0}|b{1,2}|c{3,}", "i"),
28 (r"(?=a)|(?<=b)|(?!c)|(?<!d)", "i"),
29 (r"\n\cM\0\x41\.", ""),
30 (r"\n\cM\0\x41\u1234\.", "u"),
31 (r"\n\cM\0\x41\u{1f600}\.", "u"),
32 (r"a\k<f>x\1c", "u"),
33 (r"(cg)(?<n>cg)(?:g)", ""),
34 (r"{3}", ""), (r"Em🥹j", ""),
36 (r"^(?=ab)\b(?!cd)(?<=ef)\B(?<!gh)$", ""),
37 (r"^(?<!ab)$", ""),
38 (r"a)", ""), (r"c]", ""),
40 (r"[abc]", ""),
41 (r"[|\]]", ""),
42 (r"[a&&b]", "v"),
43 (r"[a--b]", "v"),
44 (r"[a&&&]", "v"), (r"[a---]", "v"), (r"[^a--b--c]", "v"),
47 (r"[a[b[c[d[e[f[g[h[i[j[k[l]]]]]]]]]]]]", "v"),
48 (r"[\q{abc|d|e|}]", "v"),
49 (r"\p{Basic_Emoji}", "v"),
50 (r"\p{Basic_Emoji}", "u"), (r"[[^\q{}]]", "v"), (r"(?<a>)(?<a>)", ""), (r"(?noname)", "v"), (r"[\bb]", ""),
55 (r"a{2,1}", "v"), ] {
57 let parser = LiteralParser::new(
58 &allocator,
59 pattern_text,
60 Some(flags_text),
61 Options { pattern_span_offset: 1, ..Options::default() },
63 );
64 let ret = parser.parse();
65
66 let literal = format!("/{pattern_text}/{flags_text}");
67 println!("Parse: {literal}");
68 match ret {
69 Ok(pattern) => {
70 println!("✨ {pattern:#?}");
71 }
72 Err(error) => {
73 let error = error.with_source_code(literal);
74 println!("💥 {error:?}");
75 }
76 }
77 println!();
78 }
79}