我一直在尝试找出在Ruby中要使用哪个 regex ,以便获取{ }
括号之间的所有值。
users/{id}/profile
-我只需要返回{}
之间的单词列表,这里我们只有一个匹配项id
,因此结果应为{{1 }}
['id']
-在这里,我们应该返回users/{id}/profile/{name}
的列表,因为它们位于括号之间。
答案 0 :(得分:3)
def between_braces(str)
str.scan(/\{(.*?)\}/).flatten
end
str1 = "users/{id}/profile"
str2 = "users/{id}/profile/{name}"
between_braces(str1)
#=> ["id"]
between_braces(str2)
#=> ["id", "name"]
或者,
def between_braces(str)
str.scan(/(?<=\{).*?(?=\})/)
end
这里(?<=\{)
是正后视,这意味着匹配必须以左花括号开头,而(?=\})
是正后视,表示匹配之后必须有右括号。
在两种情况下,都必须通过添加问号使.*
变得懒惰(又称非贪婪)。没有这些,我们将得到以下结果:
str2.scan(/(?<=\{).*(?=\})/)
#=> ["id}/profile/{name"]
我更喜欢第二个正则表达式,因为.flatten
很丑。
答案 1 :(得分:1)
以下正则表达式将删除在{
和}
之间找到的所有子字符串。
使用Ruby的scan
方法,然后可以返回带有子字符串的数组
str = "users/{id}/profile/{hello}"
str.scan(/\{([^}]+)\}/).flatten
# return ['id', 'hello']