class Regexp::Parser
def quantifier(token)
def quantifier(token) target_node = node.extract_quantifier_target(token.text) # in case of chained quantifiers, wrap target in an implicit passive group # description of the problem: https://github.com/ammar/regexp_parser/issues/3 # rationale for this solution: https://github.com/ammar/regexp_parser/pull/69 if target_node.quantified? new_group = Group::Passive.construct( token: :passive, ts: target_node.ts, level: target_node.level, set_level: target_node.set_level, conditional_level: target_node.conditional_level, options: active_opts, ) new_group.implicit = true new_group << target_node increase_group_level(target_node) node.expressions[node.expressions.index(target_node)] = new_group target_node = new_group end unless token.token =~ /\A(?:zero_or_one|zero_or_more|one_or_more|interval) (?:_greedy|_reluctant|_possessive)?\z/x raise UnknownTokenError.new('Quantifier', token) end target_node.quantify(token, active_opts) end