簡體   English   中英

字符串包括另一個字符串或正則表達式(Ruby)

[英]String includes another string or regex (Ruby)

我需要檢查給定的String是否包含字符串或正則表達式。 如果是這樣,則應返回true,否則返回false。 我該怎么做?

我有:

def method(string)
  if @text.match(/#{string}/)
    true
  else
    false
  end
end

但是我不確定這是否是正確的方法。

考慮一下:

@text = 'foobar'

def method1(string)
  if @text.match(/#{string}/)
    true
  else
    false
  end
end

可以簡化為:

def method2(string_or_regex)
  if @text[string_or_regex]
    true
  else
    false
  end
end

String的[]方法允許我們傳入字符串或模式。 如果是字符串,則該方法將其用於固定字符串/字符串內搜索。 如果傳入模式,則返回匹配的文本。

但是,Ruby比這更友好。 我們不必告訴它有條件地返回true或false值。 在Ruby中,nil或false值被視為false,其他任何東西都是“ truethy”。 我們可以使用!!將值轉換為true / false !! ,這是雙重布爾值“ not”:

true # => true
'foo' # => "foo"
false # => false
nil # => nil

!true # => false
!'foo' # => false
!false # => true
!nil # => true

!!true # => true
!!'foo' # => true
!!false # => false
!!nil # => false

知道這一點,並且String的[]如果找不到則返回nil,或者如果找到則返回匹配的文本:

'foo'['foo'] # => "foo"
'foo'['bar'] # => nil

我們可以將原始方法簡化為:

def method3(string_or_regex)
  !!@text[string_or_regex]
end

這是測試上述每種方法的結果:

method1('foo') # => true
method1('baz') # => false

method2('foo') # => true
method2(/foo/) # => true
method2('baz') # => false
method2(/baz/) # => false

method3('foo') # => true
method3(/foo/) # => true
method3('baz') # => false
method3(/baz/) # => false

您必須小心將正則表達式對象插入另一個正則表達式:

string = /foo/
/#{string/ # => /(?-mix:foo)/

(?-mix:是將模式標志插入到另一個模式中,該模式標志可以將您的模式打開到各種奇怪的行為,並且極難發現錯誤。相反,強烈建議您使用source方法這樣做,將導致插入原始模式:

/#{string.source}/ # => /foo/

單行代碼:

!@text.match(/#{string}/).nil?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM