module RegexpExamples
A common helper used throughout various parser methods
Gem version
Constants
- IllegalSyntaxError
- VERSION
Public Class Methods
generic_map_result(repeaters, method)
click to toggle source
# File lib/regexp-examples/helpers.rb, line 36 def self.generic_map_result(repeaters, method) permutations_of_strings( repeaters.map { |repeater| repeater.public_send(method) } ) end
join_preserving_capture_groups(result)
click to toggle source
# File lib/regexp-examples/helpers.rb, line 24 def self.join_preserving_capture_groups(result) # Only save the LAST group from repeated capture groups, because # e.g. /([ab]){2} \1/.examples should NOT include "ab a" # (Hence the need for "reverse"!) subgroups = result .flat_map(&:all_subgroups) .reverse .uniq(&:group_id) GroupResult.new(result.join, nil, subgroups) end
permutations_of_strings(arrays_of_strings, max_results_limiter = MaxResultsLimiterByProduct.new)
click to toggle source
Given an array of arrays of strings, returns all possible perutations for strings, created by joining one element from each array
For example: permutations_of_strings
[ [‘a’], [‘b’], [‘c’, ‘d’, ‘e’] ] #=> [‘abc’, ‘abd’, ‘abe’] permutations_of_strings
[ [‘a’, ‘b’], [‘c’, ‘d’] ] #=> [ ‘ac’, ‘ad’, ‘bc’, ‘bd’ ]
Edge case: permutations_of_strings
[ [] ] #=> nil (For example, ths occurs during /[^dD]/.examples #=> [])
# File lib/regexp-examples/helpers.rb, line 13 def self.permutations_of_strings(arrays_of_strings, max_results_limiter = MaxResultsLimiterByProduct.new) partial_result = max_results_limiter.limit_results(arrays_of_strings.shift) return partial_result if arrays_of_strings.empty? partial_result.product( permutations_of_strings(arrays_of_strings, max_results_limiter) ).map do |result| join_preserving_capture_groups(result) end end