2014-02-14 2 views
-2

생성 : 나는 모든 a 태그의 href 속성을 잡고 해시의 배열을 구축 할 노코 기리를 사용하고내가 문자열이 문자열이 포함 탈출 보간

<ul> 
    <li><a href="/<%= @home %>/">welcome</a></li> 
</ul> 

합니다. 내가 기대하고있다 :

[{ 
    :href => "/#{ @home }/", 
    :title => "welcome" 
}] 

내가이 스크립트 시도 : 결과 문자열이 자동으로 이스케이프

doc = Nokogiri::HTML(open(file)) 
menu = [] 

doc.css('a').each do |item| 
    menu.push({ 
    :href => item[:href].gsub(/<%=(.*)%-?>/, "\#{\\1}"), 
    :title => item.text 
    }) 
end 

을; 해시 기호 앞에 여분의 백 슬래시가 있음을 확인하십시오.

[{ 
    :href => "/\#{ @home }/", 
    :title => "welcome" 
}] 

이유를 알 수 없습니다. 어떤 아이디어?

+2

를 "내가 밖으로 이유를 알아낼 수 없습니다"- 당신 자신 때문에 이스케이프 된 해시 기호를 삽입하십시오. –

+0

이중 따옴표로 묶은 문자열로 이스케이프 처리하지 않고 gsub에서 보간합니다. 작은 따옴표로 묶은 문자열에서 이스케이프 처리되지 않은 #을 사용하여 시도했습니다. 같은 결과. –

+0

@AndreiSerdeliuc, 시도'puts menu [0] [: href]' – falsetru

답변

1

당신은 문자열의 '\'은, 그것은 inspect에 의해 추가되지 않은 : 당신이 puts 문자열이 당신이 그것을 알게 될 것이다 경우 :

asd = '<%= asd %>'.gsub(/<%=(.*)%-?>/, "\#{\\1}") #=> "\#{ asd }" 

p asd #=> "\#{ asd }" <- this is `asd.inspect`, which is returned by `p` 
"\#{ asd }" <- this is `asd.inspect`, which is printed by `p` 

puts asd #=> nil <- this is `nil`, which is returned by `puts` 
#{ asd } <- this is `asd.to_s`, and it is the actual string 
+2

' '\''을 의미합니까? – falsetru

+0

좋은 지적. 그것은 문자열에 없습니다. menu.pretty_inspect를 사용하여 결과 파일에 스턱 핑하기 위해 루비 코드를 가져오고 pretty_inspect는 출력을 이스케이프 처리합니다. –

+0

예 @falsetru, 감사합니다. – mdesantis