Как я могу избежать кавычек в пользовательском аргументе псевдокласса CSS в Nokogiri? - PullRequest
1 голос
/ 20 ноября 2010

Я пытался определить собственный псевдокласс CSS в Nokogiri и столкнулся с некоторыми проблемами с неожиданными символами.

Я взял пример в документации 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)

Проблема в том, что Node # css принимает только строковый аргумент.#regex - это в основном вызов метода, а его аргумент также является строкой.Когда я запускаю этот код, я получаю что-то вроде:

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

Я пробовал экранировать одинарные / двойные кавычки, но все равно получаю это или неожиданное '['.Как я могу передать одинарные / двойные кавычки в пользовательский аргумент метода css?

В то же время я просто сопоставил «скрипт», а затем перебрал набор узлов с помощью регулярного выражения.Однако использование пользовательского псевдо-css-класса было бы более полезным, поскольку его было бы проще использовать повторно.

1 Ответ

2 голосов
/ 20 ноября 2010

Согласно Нокогири, ищущему div с помощью xpath , мы не можем добраться отсюда.

Я обычно делаю то, к чему ты вернулся. Я пропущу результаты через .select или .reject и отфильтрую, что я хочу. Это не самый красивый способ сделать это, когда было бы круче передать его в механизм выбора, но выполнение этого часто бьет элегантность.

...