2016-09-13 5 views
1

У меня возникли проблемы с соответствующим выражением. Я хочу, чтобы извлечь параметр «код» из ссылки я извлекали с помощью Nokogiri, поэтому я попытался:Как извлечь параметр из URL-адреса с использованием шаблона регулярного выражения

event_id = a.attr("href").match(/\?code=(\d+)/)[1] 

К сожалению, то, что извлекается является вся строка запроса:

?code=768140119 

Что такое правильный способ просто получить значение параметра и ничего больше?

+0

И если вы используете 'a.attr (" href ") [/ \? Code = (\ d +) /, 1]'? Или просто 'a.attr (« href ») [/ \ d + /]' (если есть только одна последовательность из одной или нескольких цифр)? –

+0

Кроме того, попробуйте 'a [" href "] [/ \ d + /]' –

+0

Можете ли вы показать вход и выход? Вы действительно получаете доступ к '[1]' матча? –

ответ

2

Не используйте регулярные выражения, используйте хорошо проверенное колесо.

URI класс Руби является вашим другом, в частности decode_www_form:

require 'uri' 

uri = URI.parse('http://foo.com?code=768140119') 
uri.query # => "code=768140119" 
URI.decode_www_form(uri.query) # => [["code", "768140119"]] 
URI.decode_www_form(uri.query).to_h # => {"code"=>"768140119"} 

Как для извлечения значения параметра тега, Nokogiri делает это легко, просто обработать узел, как хэш:

require 'nokogiri' 

doc = Nokogiri::HTML(" 
<html> 
    <body> 
    <a href='path/to/foo'>bar</a> 
    </body> 
</html> 
") 

doc.at('a')['href'] # => "path/to/foo" 

Вам не нужно терять время, набрав attr(...).

+0

URL-адрес является относительным (например, «../results?code=abcde»). Будет ли это работать с относительным URL-адресом? – Dave

+0

Что вы пробовали? «[Насколько ожидаются усилия по исследованию пользователей Stack Overflow?] (Http://meta.stackoverflow.com/a/261593/128421)». –