jQuery Заменить звездочки на выделение жирным?
Имеется база данных, в некоторых полях которой жирное выделение задается двойными звездами:
Какой-то текст **жирный текст** и еще **жирнее текст**.
Нужно, чтобы при выводе на сайте оно превращалось в:
Какой-то текст <b>жирный текст</b> и еще <b>жирнее текст</b>.
Подозреваю, что задача тривиальная и решенная уже 100500 раз, но мне не приходилось раньше особо активно работать с jQuery, поэтому даже не знаю, как такое нагуглить... Ближайшее, что попалось - это использовать .wrap(), но непонятно, как подсунуть ему именно окруженный звездочками текст. Особенно если таких случаев может быть несколько за строку, но надо избежать косяков порядка: <b> и еще </b> в примере выше.
Ответы (1 шт):
/\*\*(.*?)\*\*/ — называется регулярное выражение, используется для поиска / замены в строках.
У * есть специальное значение, x*: Совпадение символа x от 0 до много раз подряд. Поэтому звездочки нужно экранировать \*, чтобы искать совпадения именно с символом «*».
(.*?): . Что угодно, 0 или много раз подряд *.
? «lazy quantifier», заставляет остановиться при встрече \*\*, иначе сожрет все символы от первой пары ** до последней (игнорируя промежуточные пары).
В строке для замены, $1 — ссылка на то, что совпало внутри скобок.
Флажок g — global, чтобы искал все совпадения в строке, а не останавливался после первого совпадения.
let str = "Какой-то текст **жирный текст** и еще **жирнее текст**.";
document.querySelector("#p").innerHTML = bold_wrap(str);
function bold_wrap(str) {
return str.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>");
}
<p id="p"></p>