class JsRegex::Converter::GroupConverter
Template class implementation.
Private Instance Methods
build_absence_group()
click to toggle source
# File lib/js_regex/converter/group_converter.rb, line 76 def build_absence_group head = "(?:(?:.|\\n){,#{expression.inner_match_length.min - 1}}|(?:(?!" tail = ')(?:.|\n))*)' build_group(head: head, tail: tail, capturing: false) end
build_absence_group_if_simple()
click to toggle source
# File lib/js_regex/converter/group_converter.rb, line 58 def build_absence_group_if_simple if unmatchable_absence_group? unmatchable_substitution elsif expression.inner_match_length.fixed? build_absence_group else warn_of_unsupported_feature('variable-length absence group content') end end
build_group(opts = {})
click to toggle source
# File lib/js_regex/converter/group_converter.rb, line 82 def build_group(opts = {}) head = opts[:head] || '(' tail = opts[:tail] || ')' return Node.new(*wrap(head, tail)) if opts[:capturing].equal?(false) context.capture_group ref = expression.number Node.new(*wrap(head, tail), reference: ref, type: :captured_group) end
build_named_group()
click to toggle source
# File lib/js_regex/converter/group_converter.rb, line 24 def build_named_group if context.es_2018_or_higher? # ES 2018+ supports named groups, but only the angled-bracket syntax build_group(head: "(?<#{expression.name}>") else build_group end end
build_options_group()
click to toggle source
# File lib/js_regex/converter/group_converter.rb, line 45 def build_options_group if subtype.equal?(:options_switch) # can be ignored since #options on subsequent Expressions are correct drop_without_warning else build_passive_group end end
build_passive_group()
click to toggle source
# File lib/js_regex/converter/group_converter.rb, line 54 def build_passive_group build_group(head: '(?:', capturing: false) end
convert_data()
click to toggle source
# File lib/js_regex/converter/group_converter.rb, line 11 def convert_data case subtype when :capture then build_group when :named then build_named_group when :atomic then emulate_atomic_group when :comment then drop_without_warning when :options, :options_switch then build_options_group when :passive then build_passive_group when :absence then build_absence_group_if_simple else warn_of_unsupported_feature end end
emulate_atomic_group()
click to toggle source
# File lib/js_regex/converter/group_converter.rb, line 33 def emulate_atomic_group if context.in_atomic_group warn_of_unsupported_feature('nested atomic group') build_passive_group else context.start_atomic_group result = wrap_in_backrefed_lookahead(convert_subexpressions) context.end_atomic_group result end end
unmatchable_absence_group?()
click to toggle source
# File lib/js_regex/converter/group_converter.rb, line 68 def unmatchable_absence_group? expression.empty? end
unmatchable_substitution()
click to toggle source
# File lib/js_regex/converter/group_converter.rb, line 72 def unmatchable_substitution '(?!)' end
wrap(head, tail)
click to toggle source
# File lib/js_regex/converter/group_converter.rb, line 92 def wrap(head, tail) [head, convert_subexpressions, tail] end