Adrikks,
при условии отсутствия служебных символов, иначе нужно добавить экранирование.
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
label{
display: flex;
flex-direction: column;
}
#result b{
color: #FF0000;
}
</style>
</head>
<body>
<label>Исходная строка: <input type="text" id="text" placeholder="Введите текст..." value="ЗАКИРОВ АМИРЗЯН ГАЗИЗЬЯНОВИЧ"></label>
<label>Искомые совпадения: <input type="text" name="search" id="search" placeholder="Введите текст..." value="з а г"></label>
<p id="result"></p>
<script>
search.addEventListener('input', _=>{
let txt = text.value, patern = search.value.trim();
if(txt && patern) {
let ar = patern.split(/\s+/);
let reg = ar.map(_=> `(^|\\s+)(${_})(\\S*)`);
patern = new RegExp(reg.join(''), 'i');
txt = txt.replace(patern, a => ar.reduce((a,_, i) => {
patern = new RegExp(reg[i], 'i');
return a.replace(patern, '$1<b>$2</b>$3')
}, a)
)
};
result.innerHTML = txt;
})
//для теста
let event = new Event("input");
search.dispatchEvent(event);
</script>
</body>
</html>