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

erl*_*rli 1 ruby

我在这里看到了几个线程,它们显示了针对子字符串数组检查字符串并在存在匹配项时返回布尔值的最有效方法。

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

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

Car*_*and 5

str = "foobazbar"
arr = ["baz", "clowns", "bar"]
Run Code Online (Sandbox Code Playgroud)

r = Regexp.union(arr) #=> /baz|clowns|bar/ 
Run Code Online (Sandbox Code Playgroud)

str[r]                #=> "baz"
str.scan(r)           #=> ["baz", "bar"] 
Run Code Online (Sandbox Code Playgroud)

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