除了.json之外,我如何匹配此字符串中的所有内容?

时间:2014-06-25 21:22:11

标签: ruby regex

鉴于此字符串

 "www.monkeysports.com%2Fcontent%2F123.json"

我正在尝试匹配除了最后一个“.json”部分之外的所有内容。换句话说,我想要一个将执行以下操作的正则表达式:

 sum_regex.match("www.monkeysports.com%2Fcontent%2F123.json")
 => "www.monkeysports.com%2Fcontent%2F123"

仅使用正则表达式可以实现吗?

4 个答案:

答案 0 :(得分:5)

使用String#chomp

"www.monkeysports.com%2Fcontent%2F123.json".chomp( ".json" )
#> "www.monkeysports.com%2Fcontent%2F123"

答案 1 :(得分:1)

试试这个:

t = 'www.monkeysports.com%2Fcontent%2F123.json'
t.match( /^(.*)\.json$/ )[1]

答案 2 :(得分:0)

您可以使用只是测试的前瞻,而不是最终结果的一部分:

sum_regex.match("www\.monkeysports\.com%2Fcontent%2F123(?=\.json\z)")

(?=...)先行断言(即后续)

\z字符串锚的结尾

注意:不要忘记逃避特殊角色的点。

答案 3 :(得分:0)

诀窍是告诉正则表达式引擎选择你想要的东西,并排除你不想要的东西:

"www.monkeysports.com%2Fcontent%2F123.json"[/^(.+)\.json/, 1] # => "www.monkeysports.com%2Fcontent%2F123"

这是因为:

  • String#[]允许我们传入正则表达式,然后将其应用于字符串。
  • 模式/^(.+)\.json/基本上是说,“从字符串的开头开始,选择所有内容,直到找到”.json“。
  • [/^(.+)\.json/, 1]中,“,1”表示返回字符串的捕获部分。换句话说,返回与括号内的部分匹配的内容。这就是String#[]文档所指的“str[regexp, capture]”。