« Back to Index

Ruby 1.8.7 doesn’t support regular expression lookbehind assertions -> so this example mimicks it using lookaheads and some trickery. Basically the solution is to reverse your content and lookahead for the items you want to avoid or include.

View original Gist on GitHub

lookbehind.rb

tag = 'article'

text_class = '.article {'
text_element = 'article {'

puts text_element.reverse.gsub(%r/#{tag.reverse}(?![.#])/oi, "div.HTML5#{tag}".reverse).reverse
puts text_class.reverse.gsub(%r/#{tag.reverse}(?![.#])/oi, "div.HTML5#{tag}".reverse).reverse
puts '.some_text article .something_else {'.reverse.gsub(%r/#{tag.reverse}(?![.#])/oi, "div.HTML5#{tag}".reverse).reverse

# changes (as expected)
# div.HTML5article {

# leaves alone (perfect)
# .article {

# changes (as expected) 
# .some_text div.HTML5article .something_else {