我想用
if "a string" =~ /(.*)a (.*)/
# do something with with $1 and $2
end
和获取匹配的索引。 =~
应该返回索引,但是我没有办法在不使它变得混乱的情况下做到这一点,如:
if index = ("a string" =~ /(.*)a (.*)/) # this is awful
# would I be able to access $1 and $2 in here?
end
if match = /(.*)a (.*)/.match("a string")
# access captures via the captures array, but that's gross
# also, I'd have to manually find the index of the substring
end
那么有一个技巧我不能谷歌吗?另外,我想保持一些性能,所以我不愿意通过map
或我见过的其他一些答案来搜索子串的索引。
答案 0 :(得分:1)
我认为你是对的,你没有任何诡计。
使用=~
可以获得索引,但是没有得到匹配的字符串。在找到的索引中,你显然只会得到一个角色,这根本不是你想要的。
# For other readers:
string = "a string"
regexp = /a str/
index = (string =~ regexp)
string[index] #=> 'a' and not 'a str'
使用match
,您确实可以获得完全匹配,但在这种情况下,您不会自动获得主字符串中这些捕获的索引。但至少您可以选择手动获取每个捕获的子字符串的索引。
captured_strings.each_with_object({}) do |substring, hash|
index = string.index(substring)
hash[index] = substring
end
# note that finding index like that might not always work accurately
我看到它的方式,match
是唯一的选择。