Вы можете использовать счетчик и оператор остатка, передавая обратный вызов replace
:
let counter = 0;
result = original.replace(/[*]/g, () => ++counter % 2 ? "<span>" : "</span>");
Live Пример:
const original = "text *inner text 1* text2 *inner text 2*";
let counter = 0;
const result = original.replace(/[*]/g, () => ++counter % 2 ? "<span>" : "</span>");
console.log(result);
Это работает, потому что 1 % 2
- это 1
, что верно, но 2 % 2
- это 0
, что ложно, а 3 % 2
- 1
, что это правда ...
Другой подход - использовать регулярное выражение для поиска совпадений между двумя *
, используя группу захвата для захвата совпадений:
result = original.replace(/\*(.*?)\*/g, "<span>$1</span>");
Live Example :
const original = "text *inner text 1* text2 *inner text 2*";
let counter = 0;
const result = original.replace(/\*(.*?)\*/g, "<span>$1</span>");
console.log(result);
Предполагается, что нормально работать только на основе чередующихся *
символов.