Parselly

Pure Ruby CSS selector parser.
Installation
gem 'parselly'
bundle install
Or install it directly:
gem install parselly
Requires Ruby 2.7 or newer.
Usage
require 'parselly'
ast = Parselly.parse('article#main.content[data-state="open"] > a:hover')
ast.ids
#=> ["main"]
ast.attributes
#=> [{ name: "data-state", operator: "=", value: "open" }]
ast.pseudo_class_names
#=> ["hover"]
ast.specificity
#=> [1, 3, 2]
Strict parsing raises Parselly::LexError or Parselly::SyntaxError for invalid selectors:
Parselly.parse('div >')
Use tolerant mode when you want a Parselly::ParseResult instead:
result = Parselly.parse('div >', tolerant: true)
result.success?
#=> false
result.errors.first[:message]
#=> "Parse error: unexpected $end '' at 1:6"
Use Parselly.sanitize to escape text for a CSS identifier:
Parselly.sanitize('1st item')
#=> "\\31 st\\ item"
Development
bin/setup
bundle exec rake
License
MIT