使用正则表达式修改 nokogiri 中的 类
modifying classes in nokogiri with regex
我正在使用 nokogiri 删除某些 classes:
doc.css("span").remove_class("classname-1")
我想知道是否有办法删除使用正则表达式定义的 classes。例如,如果我想删除一个 class 后面有任何数字系列,比如 /classname-\d+/
,我该怎么做?直接将正则表达式插入 remove_class
方法是行不通的,而且我似乎无法在任何地方找到这个问题(或解决方案!)。
在相关说明中,是否也可以使用正则表达式搜索 寻找 class,然后将那些 class 替换为单个新 class 名称?
感谢您的任何 insight/help!
不幸的是,根据您当前的方法,我认为您无法使用现有方法做到这一点。但是,嘿,有志者事竟成!看看 remove_class
source :
def remove_class name = nil
each do |el|
if name
classes = el['class'].to_s.split(/\s+/)
if classes.empty?
el.delete 'class'
else
el['class'] = (classes - [name]).uniq.join " "
end
else
el.delete "class"
end
end
self
end
您能想到如何让它适用于您的用例吗?上面的方法基本上遍历从 doc.css('span')
获取的 NodeSet
中的每个 element
,它获取每个元素的 class 并查看它是否匹配,如果匹配,它去掉了 class
。
方法可以这样打补丁:
module Nokogiri
module XML
class NodeSet
def remove_class name = nil
name = name.is_a?(String) ? Regexp.new("^#{name}$") : name
each do |el|
if name
classes = el['class'].to_s.split(/\s+/)
if classes.empty?
el.delete 'class'
else
el['class'] = classes.reject{ |c| c.match name }.uniq.join " "
end
else
el.delete "class"
end
end
self
end
end
end
end
doc.css('span').remove_class(/classname-1/) #=> Equivalent nodeset
doc.css('span[class^="classname-"]').each{|el| el.delete 'class'}
可能已经足够好了,但如果 nbot 可能:
doc.css('span').select{|el| el[:class][/classname-\d/]}.each{|el| el.delete 'class'}
我正在使用 nokogiri 删除某些 classes:
doc.css("span").remove_class("classname-1")
我想知道是否有办法删除使用正则表达式定义的 classes。例如,如果我想删除一个 class 后面有任何数字系列,比如 /classname-\d+/
,我该怎么做?直接将正则表达式插入 remove_class
方法是行不通的,而且我似乎无法在任何地方找到这个问题(或解决方案!)。
在相关说明中,是否也可以使用正则表达式搜索 寻找 class,然后将那些 class 替换为单个新 class 名称?
感谢您的任何 insight/help!
不幸的是,根据您当前的方法,我认为您无法使用现有方法做到这一点。但是,嘿,有志者事竟成!看看 remove_class
source :
def remove_class name = nil
each do |el|
if name
classes = el['class'].to_s.split(/\s+/)
if classes.empty?
el.delete 'class'
else
el['class'] = (classes - [name]).uniq.join " "
end
else
el.delete "class"
end
end
self
end
您能想到如何让它适用于您的用例吗?上面的方法基本上遍历从 doc.css('span')
获取的 NodeSet
中的每个 element
,它获取每个元素的 class 并查看它是否匹配,如果匹配,它去掉了 class
。
方法可以这样打补丁:
module Nokogiri
module XML
class NodeSet
def remove_class name = nil
name = name.is_a?(String) ? Regexp.new("^#{name}$") : name
each do |el|
if name
classes = el['class'].to_s.split(/\s+/)
if classes.empty?
el.delete 'class'
else
el['class'] = classes.reject{ |c| c.match name }.uniq.join " "
end
else
el.delete "class"
end
end
self
end
end
end
end
doc.css('span').remove_class(/classname-1/) #=> Equivalent nodeset
doc.css('span[class^="classname-"]').each{|el| el.delete 'class'}
可能已经足够好了,但如果 nbot 可能:
doc.css('span').select{|el| el[:class][/classname-\d/]}.each{|el| el.delete 'class'}