Мне не удалось найти регулярное выражение, которое работает здесь. Однако можно сделать следующее:
def get_juicy_bit(str, word)
str.match(/\b#{word}\S+/) { |md| str[0...md.end(0)] }
end
word = "test"
get_juicy_bit("Metrics testSomeMetrics gets data", word)
#=> "Metrics testSomeMetrics"
get_juicy_bit("Metrics testSomeMetrics gets data", word)
#=> "Metrics testSomeMetrics"
get_juicy_bit("Metrics donottestMetrics gets data", word)
#=> nil
get_juicy_bit("testMetrics gets data", word)
#=> "testMetrics"
get_juicy_bit(" testMetrics gets data", word)
#=> " testMetrics"
См. MatchData # конец . Регулярное выражение /\b#{word}\S+/
гласит: «соответствует разрыву слова (\b
), за которым следует значение переменной word
, за которым следуют один или несколько символов, отличных от пробела». Здесь разрыв слова - это символ, отличный от символа слова (буква, ди git или подчеркивание) или начало строки.