2010-11-20 1 views
1

Nokogiri에서 사용자 지정 CSS 의사 클래스를 정의하려고했지만 예기치 않은 문자가있는 문제가 발생했습니다.Nokogiri의 사용자 지정 CSS 의사 클래스 인수에서 따옴표를 이스케이프 처리하려면 어떻게해야합니까?

나는 Node 문서에서 예제를 취해서 필요에 맞게 수정하려고 시도했습니다. 다음과 같이 node.text 값과 정규 표현식을 일치 시키려고했습니다.

node.css('script:regex("[\"\']([^/s]+)[\"\']")', Class.new { 
    def regex node_set, regex 
    node_set.find_all { |node| node.text =~ /#{regex}/ } 
    end 
}.new) 

문제는 노드 # css가 문자열 인수 만 허용한다는 것입니다. #regex는 기본적으로 메서드 호출이며 인수도 문자열입니다. 이 코드를 실행하면, 내가 좋아하는 뭔가를 얻을 : 나는 시도했다

Nokogiri::CSS::SyntaxError (unexpected '\"' after ''(?i-mx:[\'') 

를 싱글/더블 따옴표를 탈출,하지만 난 여전히이 예상치 못한 얻을 '['. 커스텀 css 메소드의 인수에 단일/이중 따옴표를 어떻게 전달할 수 있습니까?

그동안 내가 한 것은 "스크립트"와 일치시킨 다음 노드 집합을 정규식 정규 표현식으로 반복하는 것이 었습니다. 커스텀 pseudo css 클래스를 사용하면 더 쉽게 재사용 될 수 있기 때문에 더 유용 할 것이다.

답변

2

Nokogiri searching for div using xpath에 따르면 여기에서 연결할 수 없습니다.

나는 보통 당신이 되돌아온 것을합니다. 결과를 .select 또는 .reject으로 전달하고 원하는 것을 필터링합니다. 선택 엔진으로 전달하는 것이 더 시원할 때 가장 좋은 방법은 아니지만, 끝내는 것은 종종 우아함을 뛰어 넘습니다.