У меня есть следующая строка:
<html>
<head><meta>...</meta><head>
<body>
<div id="foo">
Text I want to search & replace occurrences
of keywords such as Foo or foo while ignoring case
</div>
</body>
</html>
То, что я хочу закончить, это:
<html>
<head><meta>...</meta><head>
<body>
<div id="foo">
Text I want to search & replace occurrences
of keywords such as <b>Foo</b> or <b>foo</b> while ignoring case
</div>
</body>
</html>
Так что мне бы очень хотелось найти и заменить foo
на <b>foo</b>
или <b>Foo</b>
. Важно сохранить регистр заменяемой строки, но сопоставить ее с ключевым словом foo
, игнорируя регистр совпадений.
Еще одна важная вещь: замена игнорирует все HTML-теги и их содержимое. Обратите внимание, что <div id="foo">
остается таким, как есть.
Я написал это, но еще не тестировал
text = text.replace("(?i)"+keyword+"(?!([^<]+)?>)", "<b>"+keyword+"</b>");
Проблема с вышесказанным заключается в том, что он не запоминает случай замены слова и просто вставляет ключевое слово.