Using a regex, this pattern should work for you:
var r = new RegExp("(<\\w+?\\s+?class\\s*=\\s*['\"][^'\"]*?\\b)" + key + "\\b", "i"); # Λ Λ Λ # |_________________________________________| | # ____________| | # [Creating a backreference] | # [which will be accessible] [Using "i" makes the matching "case-insensitive".]_| # [using $1 (see examples).] [You can omit "i" for case-sensitive matching. ]
eg.
var oldClass = "b"; var newClass = "e"; var r = new RegExp("..." + oldClass + "..."); "<div class='abc d'></div>".replace(r, "$1" + newClass); // ^-- returns: <div class='aec d'></div> "<div class=\"abcd\"></div>".replace(r, "$1" + newClass); // ^-- returns: <div class="aecd"></div> "<div class='abcd'></div>".replace(r, "$1" + newClass); // ^-- returns: <div class='abcd'></div> // <-- NO change
Note:
To work on this regular expression, the class string should not have ' or " .
That is, <div class="a 'b' cd"... does NOT match.
source share