mysticatea / regexpp

The regular expression parser for ECMAScript.
MIT License
153 stars 15 forks source link

bug about x?y*z+ #3

Closed bluelovers closed 6 years ago

bluelovers commented 6 years ago
[ { type: 'Quantifier',
    start: 2,
    end: 3,
    raw: '?', // <====== 'x?'
    min: 0,
    max: 1,
    greedy: true,
    element: 
     { type: 'Character',
       parent: [Circular],
       start: 1,
       end: 2,
       raw: 'x',
       value: 120 } },
  { type: 'Quantifier',
    start: 4,
    end: 5,
    raw: '*', // <====== 'y*'
    min: 0,
    max: Infinity,
    greedy: true,
    element: 
     { type: 'Character',
       parent: [Circular],
       start: 3,
       end: 4,
       raw: 'y',
       value: 121 } },
  { type: 'Quantifier',
    start: 6,
    end: 7,
    raw: '+', // <====== 'z+'
    min: 1,
    max: Infinity,
    greedy: true,
    element: 
     { type: 'Character',
       parent: [Circular],
       start: 5,
       end: 6,
       raw: 'z',
       value: 122 } } ]

i think u can make a new type for quantifier mark {n,m} + * ?

this form anthor old parser

[ Quantified {
    type: 'quantified',
    offset: 0,
    text: 'u{1,2}',
    body: Literal { type: 'literal', offset: 0, text: 'u', body: 'u' },
    quantifier: 
     Quantifier {
       type: 'quantifier',
       offset: 1,
       text: '{1,2}',
       min: 1,
       max: 2,
       greedy: true } },
  Quantified {
    type: 'quantified',
    offset: 6,
    text: 'u{1,}',
    body: Literal { type: 'literal', offset: 6, text: 'u', body: 'u' },
    quantifier: 
     Quantifier {
       type: 'quantifier',
       offset: 7,
       text: '{1,}',
       min: 1,
       max: Infinity,
       greedy: true } },
  Literal { type: 'literal', offset: 11, text: 'i', body: 'i' },
  Quantified {
    type: 'quantified',
    offset: 12,
    text: 'x?',
    body: Literal { type: 'literal', offset: 12, text: 'x', body: 'x' },
    quantifier: 
     Quantifier {
       type: 'quantifier',
       offset: 13,
       text: '?',
       min: 0,
       max: 1,
       greedy: true } },
  Quantified {
    type: 'quantified',
    offset: 14,
    text: 'y*',
    body: Literal { type: 'literal', offset: 14, text: 'y', body: 'y' },
    quantifier: 
     Quantifier {
       type: 'quantifier',
       offset: 15,
       text: '*',
       min: 0,
       max: Infinity,
       greedy: true } },
  Quantified {
    type: 'quantified',
    offset: 16,
    text: 'd+?',
    body: Literal { type: 'literal', offset: 16, text: 'd', body: 'd' },
    quantifier: 
     Quantifier {
       type: 'quantifier',
       offset: 17,
       text: '+',
       min: 1,
       max: Infinity,
       greedy: false } } ]