Пример ввода и ожидаемый выход
input:
Код: Выделить всё
let originalHtml = "This is a sample[/b] text with [i]some[/i] formatting.";[b]let referenceText = "sample text";
let ideaId = 123;
let highlightTag = `highlight_${ideaId}`;
Код: Выделить всё
This is a sample[/b] text with [i]some[/i] formatting.[b]< /code>
Тег выделения должен обернуть всю соответствующую фразу < /strong>, сохраняя HTML -теги внутри него. < /p>
[h4] [b], что я попробовал [/b] [/h4]
Я написал эту функцию, чтобы попытаться заменить:
function highlightTextIgnoringTags(originalHtml, referenceText, highlightTag) {
let text = referenceText.replace(/[-/\^$*+?.()|[\]{}]/g, "\\$&"); // Escape special regex characters
let textWithTags = text.replace(/\s/g, "(?:\\s|]+>)*"); // Allow spaces and tags
let regex = new RegExp(`(${textWithTags})`, "gi"); // Case-insensitive regex
return originalHtml.replace(regex, (match) => highlightTag.replace('$0', match));
}
Код: Выделить всё
This is a sample[/b] text with [i]some[/i] formatting.
< hr />
Вопрос < /strong> < /h4>
Как я могу изменить свою функцию, чтобы правильно обернуть всю сопоставленную фразу при обеспечении действительного HTML ? Есть ли лучший подход с использованием DOM -анализации или другого метода? < /P>
Любая помощь будет высоко оценена!
Подробнее здесь: https://stackoverflow.com/questions/794 ... valid-html
Мобильная версия