Наверное, есть более разумные решения, но попробуйте использовать
динамические компоненты Vue.
Строку разбить на узлы: текстовые и компоненты. Сделать какой-то минимальный компонент для просто-текстовых кусков.
Например, из строки 'lorem ipsum dolor [placeholder|1] sit amet [placeholder|2]'
сделать массив
[
['text', 'lorem ipsum dolor'],
['copy', 1],
['text', 'sit amet'],
['copy', 2],
]
если я правильно понял, что каждый из плейсхолдеров копирует значение после вертикальной черты – первый копирует 1, второй 2.
В темплейте перебрать этот массив примерно так
<template v-for="item in items">
<component :is="text" v-if="item[0] === 'text'">{ item[1] }</component>
<component :is="copy" v-if="item[0] === 'copy'" :value="item[1]" />
</template>