[英]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.