Ruby正则匹配:如何返回匹配到的正则表达式具体值
获取Ruby正则匹配的具体字符串
嘿,这个问题很常见~你当前用any?的方式确实只会返回布尔值true,如果想要拿到匹配到的具体字符串,有这两种实用的方法:
方法1:获取第一个匹配项(适合你的场景)
用find方法替代any?,它会遍历数组并返回第一个满足匹配条件的元素:
pattern = Regexp.union(['+', '-']) #=> /\+|\-/ match_str = ['foo', '+', 'bar'].find { |str| pattern.match?(str) } # 输出结果:"+"
find的逻辑就是找到符合条件的元素就立刻返回,完全符合你想要拿到第一个匹配字符串的需求。
方法2:获取所有匹配项
如果你的数组里可能有多个符合正则的元素,想要一次性拿到全部结果,可以用select:
pattern = Regexp.union(['+', '-']) #=> /\+|\-/ all_matches = ['foo', '+', 'bar', '-'].select { |str| pattern.match?(str) } # 输出结果:["+", "-"]
补充一下:any?的设计初衷只是判断数组中是否存在符合条件的元素,所以只会返回布尔值。而find和select则专注于返回实际匹配的元素,刚好能解决你的问题~
内容的提问来源于stack exchange,提问作者TheMayerof
相关产品推荐
相关产品推荐

