如何使用块的正则表达式方法?

时间:2016-12-16 02:04:57

标签: ruby regex block

我想在这里做的是在每个常量之后插入um。我必须传递添加了um的字符串的每个字符,然后将其传递给与该方法关联的块。我不明白如何通过块实例化将字符传递给块。

class Um    
  def to_um( string )
    string.gsub(/(?<=[^aeiou])/, 'um') do |v|
      "#{v}"
    end
  end

  def to_english( string )
    # will output the to_um method back to english
  end
end

Um.to_um( "Watch this get converted to yum!" ) { |v| print v }

应输出:

Wumatumcumhum tumhumisum gumetum cumonumvumerumtumedum tumo yumumum!

2 个答案:

答案 0 :(得分:1)

gsub使用块替换参数,而不是两者。如果要使用块来替换匹配,则需要省略第二个参数:

string.gsub(/(?<=[^aeiou])/) { |m| "#{m}um" }

请注意,此处无需使用块,您可以使用\1在替换参数中包含匹配的字符:

string.gsub(/(?<=[^aeiou])/, '\1um')

答案 1 :(得分:1)

CONSONANTS = "bcdfghjklmnpqrstvwxyz"

def to_um(str)
  str.gsub(/(?<=[#{CONSONANTS}])/i, 'um')
end

str = "Watch this get converted to yum!"

to_um(str)
  #=> "Watumcumhum tumhumisum gumetum cumonumvumerumtumedum tumo yumumum!"

正则表达式上写着,“在正面观察中匹配一个辅音,大小写无关紧要。如果有匹配,辅音后面的零长度字符串将替换为"um"