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 {