如何不使用gsub或split,通过Domainatrix.parse获取online.citibank.co.in?
问题场景
使用Domainatrix解析URL时遇到如下情况:
2.5.0 :150 > url = 'https://www.online.citibank.co.in/credit-card/apply' => "https://www.online.citibank.co.in/credit-card/apply" 2.5.0 :151 > Domainatrix.parse(url) => #<Domainatrix::Url:0x00007fd7850df4a8 @scheme="https", @host="www.online.citibank.co.in", @port="", @url="https://www.online.citibank.co.in/credit-card/apply", @public_suffix="co.in", @domain="citibank", @subdomain="www.online", @path="/credit-card/apply", @localhost=false, @ip=false> 2.5.0 :152 > Domainatrix.parse(url).domain_with_public_suffix => "citibank.co.in"
调用domain_with_public_suffix只能得到citibank.co.in,但需要获取online.citibank.co.in,且要求不能使用gsub或split方法。
解决方案
可以利用Domainatrix解析后的对象属性,结合字符串的rindex方法实现需求:
url = 'https://www.online.citibank.co.in/credit-card/apply' parsed_url = Domainatrix.parse(url) # 截取子域名的最后一段 last_sub_segment = parsed_url.subdomain[parsed_url.subdomain.rindex('.') + 1..-1] # 拼接得到目标域名 target_domain = "#{last_sub_segment}.#{parsed_url.domain_with_public_suffix}" puts target_domain # 输出: online.citibank.co.in
逻辑说明
parsed_url.subdomain返回www.online,通过rindex('.')找到最后一个.的索引位置,截取该位置之后的内容得到online;- 将截取的子域名段与
domain_with_public_suffix返回的citibank.co.in拼接,即可得到目标域名; - 全程未使用
gsub或split方法,符合要求。
内容的提问来源于stack exchange,提问作者Vinay Kumar
相关产品推荐
相关产品推荐

