@Automation Baby @Emerael
Я бы ещё вот так поправил:
<!-- Музыка в постах и подписях (c) Emerael, Часть 2 в ХТМЛ-Низ -->
<script>
(()=>{
const selectors = [
'#profile-signature:contains("[audio=")', //подпись в профиле
'.parsedsig:contains("[audio=")', //предпросмотр подписи
'.post-content:contains("[audio=")', //посты и подписи в них
];
const replaceAudio = () => {
const containMusic = $(selectors.join(', '));
containMusic.find('p').each((_, el) => {
const re = /\[audio=([^\]]+)]([^[]+)\[\/audio\]/gmi;
el.innerHTML = el.innerHTML.replace(re, `<div class="audio-block"><span class="audio-title">$2:</span><audio controls src="$1">
<span>ваш браузер не поддерживает HTML5 аудио. Вот взамен
<a href="$1">ссылка на трек</a></span>
</audio></div>`);
});
};
replaceAudio();
$(document).on('pun_post', () => {replaceAudio()});
})();
</script>
1. .post-content вместо .post-body - чтобы не убивать событие click для ajax-отправки оценки поста; при этом .post-content также включает в себя подпись
2. стоит разбирать тег только внутри параграфов, дабы исключить блоки code (а многострочность и так не требуется - тег должен быть инлайновым, многострочная ссылка - не валидна)
Набросал навскидку - не тестировал, лучше проверить.
Ещё из мыслей: почему бы не использовать пользовательские BB-теги вместо очередного костыля? )