检查字符串是否包含数组中的子字符串并获得匹配项

问题描述 投票:1回答:2

我在这里看到了几个线程,它们显示了最有效的方式来根据子字符串数组检查字符串,如果匹配则返回布尔值。

str = "foobazbar"
arr = ["baz", "clowns"]
result = arr.any? { |substring| str.include?(substring) } # solution
result => true

但是,尽管该解决方案既优雅又高效,但是有什么方法可以返回比赛本身吗?使用上面的示例,我还想知道匹配为baz。做到这一点的最佳方法是什么?

ruby
2个回答
2
投票
str = "foobazbar"
arr = ["baz", "clowns"]
result = arr.find { |s| str.include?(s) }

[result此时是arr中的第一个元素,它是str的子字符串或nil


5
投票
str = "foobazbar"
arr = ["baz", "clowns", "bar"]

r = Regexp.union(arr) #=> /baz|clowns|bar/ 

str[r]                #=> "baz"
str.scan(r)           #=> ["baz", "bar"] 

请参见Regexp::unionString#[]String#scan

© www.soinside.com 2019 - 2024. All rights reserved.