我强烈同意在这种情况下使用 URI 模块的建议,而且我认为自己对正则表达式并不擅长。尽管如此,展示一种可能的方式来做你所要求的似乎是值得的。
test_url1 = 'https://www.example.com/some/page?user=1&email=joe@schmoe.org'
test_url2 = 'http://test.com/'
test_url3 = 'http://test.com'
regex = /^https?:\/\/[^\/]+(.*)/
regex.match(test_url1)[1]
# => "/some/page?user=1&email=joe@schmoe.org"
regex.match(test_url2)[1]
# => "/"
regex.match(test_url3)[1]
# => ""
请注意,在最后一种情况下,URL 没有尾随'/'
,因此结果是空字符串。
正则表达式 ( /^https?:\/\/[^\/]+(.*)/
) 表示字符串以 ( ^
) http
( http
) 开头,可选地后跟s
( s?
),后跟://
( :\/\/
) 后跟至少一个非斜线字符 ( [^\/]+
),后跟零个或多个字符,我们想要捕获那些字符 ( (.*)
)。
我希望你觉得这个例子和解释很有教育意义,我再次建议不要在这种情况下实际使用正则表达式。URI 模块使用起来更简单,也更健壮。