2012-04-20 36 views
9

Tôi làm cách nào để xóa "www", "http: //", "https: //" khỏi chuỗi bằng Ruby?Xóa "www", "http: //" khỏi chuỗi

tôi đã cố gắng này, nhưng nó đã không làm việc:

s.gsub('/(?:http?:\/\/)?(?:www\.)?(.*)\/?$/i', '') 

Dưới đây là những gì tôi đang làm trong Rails:

<%= auto_link(job.description) do |url| url.truncate(25).gsub('http://', '') end %> 

Url được cắt ngắn, nhưng mục tiêu của tôi là để loại bỏ các đầu các liên kết, chẳng hạn như "www" hoặc "http: //" để liên kết trông giống như "google.com/somepage/d ...", không giống như "http: //google.com/some ..."

+0

[ 'String # sub'] (http://www.ruby-doc.org/core-1.9.3/String .html # method-i-sub-21) –

+0

Tôi đã thử gsub với một số regex mà tôi tìm thấy nhưng không có gì hiệu quả. Ví dụ: s.gsub ('/ (?: http?: \/\ /)? (?: www \.)? (. *) \ /? $/I', '') –

+0

Cái gì to hơn vấn đề bạn đang cố gắng giải quyết? Bạn có muốn chuyển hướng "www.mydomain.com" sang "mydomain.com" không? – CambridgeMike

Trả lời

39
s = s.sub(/^https?\:\/\//, '').sub(/^www./,'') 

Nếu bạn không muốn sử dụng s =, bạn nên sử dụng sub! s thay vì tất cả sub s.

Những vấn đề với mã của bạn là:

  1. Câu hỏi đánh dấu luôn sau SAU một nhân vật tùy chọn
  2. Luôn luôn thay thế một mẫu trong một tiểu. Bạn có thể "chuỗi lên" nhiều hoạt động.
  3. Sử dụng sub thay vì gsub^ khi bắt đầu Regexp để nó chỉ thay thế http:// ngay từ đầu nhưng để nguyên ở giữa.
+0

Câu trả lời thú vị. Đây là bản nâng cấp: 's. (/^Https? \: \/\/(Www.)? /, '')' ... và '.sub (/\/.*$/, '')' thành xóa đường dẫn – Nav

4

Phương pháp này nên bắt tất cả 3 biến thể:

def strip_url(url) 
    url.sub!(/https\:\/\/www./, '') if url.include? "https://www." 

    url.sub!(/http\:\/\/www./, '') if url.include? "http://www." 

    url.sub!(/www./, '')   if url.include? "www." 

    return url 
end 

strip_url("http://www.google.com") 
    => "google.com" 
strip_url("https://www.facebook.com") 
    => "facebook.com" 
strip_url("www.stackoverflow.com") 
    => "stackoverflow.com" 
+0

Không hoạt động trên tất cả các trường hợp. Làm thế nào về strip_url ("http://stackoverflow.com")? –

+0

@ JuliusMarkūnas strip_url ("stackoverflow.com") vẫn trả về kết quả mong đợi. Bạn mong đợi điều gì khác biệt? – Josh

+0

damn, quên để trích dẫn mã: 'strip_url (" http://stackoverflow.com ")' –

0
def strip_url(target_url) 
    target_url.gsub("http://", "") 
      .gsub("https://", "") 
      .gsub("www.", "") 
end 

strip_url("http://www.google.com") 
=> "google.com" 
strip_url("https://www.google.com") 
=> "google.com" 
strip_url("http://google.com") 
=> "google.com" 
strip_url("https://google.com") 
=> "google.com" 
strip_url("www.google.com") 
=> "google.com" 
Các vấn đề liên quan