Как заменить часть входного значения?

#jquery #ruby #ruby-on-rails-3

#jquery #ruby #ruby-on-rails-3

Вопрос:

У меня есть поле ввода, в котором пользователь может разместить ссылку на страницу facebook. Прямо сейчас я использую регулярное выражение для проверки URL.

 URL_regex = /A(http|https|ftp)://([w]*).([w]*).(com|net|org|biz|info|mobi|us|cc|bz|tv|ws|name|co|me)(.[a-z]{1,3})?/i
  

Я хочу, чтобы проверку прошли только следующие четыре версии:

  • https://www.facebook.com/redbull
  • http://www.facebook.com/redbull
  • www.facebook.com/redbull
  • facebook.com/redbull

Тогда я хочу сохранить только часть «redbull» в базе данных. Я попробовал Rubular, но я не могу понять логику регулярного выражения.

Заранее спасибо

Найдено решение, спасибо Кейли:

   URL_regex = /A((http|https)://)?(www.)?facebook.com/([S] )/i
  

Ответ №1:

Это будет соответствовать только 4 предложенным вами вариантам, плюс http://facebook.com/redbull и https://facebook.com/redbull , поскольку они также могут быть распространенными вариантами.

 /A((http|https)://)?(www.)?facebook.com/(w*)?/i
  

Ответ №2:

Вы уже получили хорошие ответы по регулярным выражениям, но я хотел бы указать на URI модуль:

 >> require 'uri' 
#=> true
>> uri = URI.parse "https://www.facebook.com/redbull" 
#=> #<URI::HTTPS:0x000001010a41a8 URL:https://www.facebook.com/redbull>
>> uri.scheme 
#=> "https"
>> uri.host 
#=> "www.facebook.com"
>> uri.path 
#=> "/redbull"
  

Возможно, проверять отдельные части проще, чем одно большое регулярное выражение.

Ответ №3:

Вы можете использовать его без регулярных выражений:

 var your_url = ''; //here, you place your URL

console.log(your_url.slice(your_url.lastIndexOf('/')   1));
  

Это даст желаемый результат.

Ответ №4:

Вы почти на месте. Вам просто нужно добавить другую группу захвата.

 A(http|https|ftp)://([w]*).([w]*).(com|net|org|biz|info|mobi|us|cc|bz|tv|ws|name|co|me)/(w )?
  

или

 (http|https:ftp://)?w*.w .(com|net|org|biz|info|mobi|us|cc|bz|tv|ws|name|co|me)/(w )

irb(main):014:0> if x =~ /A(http|https|ftp)://([w]*).([w]*).(com|net|org|biz|info|mobi|us|cc|bz|tv|ws|name|co|me)/(w )?/
irb(main):015:1> puts $5
irb(main):016:1> end
redbull
=> nil