Find overlapping Regexp matches

后端 未结 2 398
生来不讨喜
生来不讨喜 2021-01-05 04:53

I want to find all matches within a given string including overlapping matches. How could I achieve it?

# Example
\"a-b-c-d\".???(/\\w-\\w/)  # => [\"a-b\         


        
相关标签:
2条回答
  • 2021-01-05 05:36

    Use capturing inside a positive lookahead:

    "a-b-c-d".scan(/(?=(\w-\w))/).flatten
     # => ["a-b", "b-c", "c-d"]
    

    See Ruby demo

    0 讨论(0)
  • 2021-01-05 05:37

    I suggest a non-regex solution:

    "a-b-c-d".delete('-').each_char.each_cons(2).map { |s| s.join('-') }
      #=> ["a-b", "b-c", "c-d"]
    

    or

    "a-b-c-d".each_char.each_cons(3).select.with_index { |_,i| i.even? }.map(&:join)
      #=> ["a-b", "b-c", "c-d"]
    

    or

    enum = "a-b-c-d".each_char
    a = []
    loop do
      a << "%s%s%s" % [enum.next, enum.next, enum.peek]
    end
    a #=> ["a-b", "b-c", "c-d"]
    
    0 讨论(0)
提交回复
热议问题