考えるべきことがいくつかあります。
で始まります:
str = "doweighin;domeasurements,weightplot"
str.gsub(';', ',').split(',') # => ["doweighin", "domeasurements", "weightplot"]
str.gsub(';', ',').split(',').include?('weightplot') # => true
ただし、正規表現を使用する場合は、次のように使用するの.gsub(';', ',').split(',')
はばかげています。split
str.split(/[;,]/) # => ["doweighin", "domeasurements", "weightplot"]
ターゲットまたは検索語の大文字と小文字が異なる場合、検索が失敗するという小さな問題があります。
str.split(/[;,]/).include?('WeightPlot') # => false
テストを実行する前に、大文字または小文字のいずれかに大文字または小文字を折りたたむことで修正できます。
str.downcase.split(/[;,]/).include?('WeightPlot'.downcase) # => true
ただし、テストを行うためのより短い方法があります。
str['weightplot'] # => "weightplot"
文字列内検索を行うだけです。探している文字列が別の文字列内にある場合、これは誤検知を返す可能性があります。
str[/\bWeightPlot\b/i] # => "weightplot"
正規表現を使用して大文字と小文字を区別せずに単語を検索し、その両側に単語境界が必要です。
ただし、ターゲット文字列をハードコードするのではなく、文字列補間を使用して実行時に挿入します。
target = 'WeightPlot'
str[/\b#{ target }\b/i] # => "weightplot"
を使用して、ショートカットの結果をブール値の true/false に変換できます!!
。"not-not" は、nil
結果を false に変換し、それ以外を true に変換する優れた方法です。
!!str['weightplot'] # => true
!!str[/\bWeightPlot\b/i] # => true