Если вы не хотите делать все за один шаг, вы можете воспользоваться следующим подходом:
- Получите
textContent
вашей строки, в которой пропущены все теги HTML. - Из этого извлеките последнее слово.
- В исходной строке замените последнее слово упакованной версией.
Если вы работаете в браузере, это может выглядеть вот так:
function highlightLast( str ) {
// create a wrapper to get the textcontent
const wrapper = document.createElement( 'div' );
wrapper.innerHTML = str;
// get the last word
const lastWord = wrapper.textContent.split( /\b/ ).pop();
// highlight the last occurrence of that word
return str.replace( new RegExp( `${lastWord}(?![\\s\\S]*${lastWord})` ), `<span class="highlight-word">${lastWord}</span>` );
}
console.log( highlightLast( '<div id="divA">This is <span>some</span> text</div>' ) );
console.log( highlightLast( '<div id="divA">This is text with <span>some</span> more text</div>' ) );
Обратите внимание, что есть некоторые крайние случаи, которые вам, возможно, придется решить. В частности, если слово содержит специальные символы, вам необходимо экранировать их перед созданием RegExp.