JSFiddle - React, Tailwind, and code Playground

HTML

<div id="result"></div>

JavaScript

(function () {
	setTimeout(function () {
		var count = 10000;
		var data = '{Пожалуйста|Просто} сделайте так, чтобы это {удивительное|крутое|простое} тестовое предложение {изменялось {быстро|мгновенно} случайным образом|менялось каждый раз}.';

		v1_count = v2_count = 0;

		log('iterations: ', count);
		log('data: "' + data + '"');

		/*******************************************************/

		log('v1');

		test(solution_v1, count, data);

		log('call count: ', v1_count);

		/*******************************************************/

		log('v2');

		test(solution_v2, count, data);

		log('call count: ', v2_count);

		/*******************************************************/
	}, 1000);

	function test(fn, count, data) {
		var time = new Date().getTime();

		for (var i = count; i--;) {
			fn(data);
		}

		time = new Date().getTime() - time;

		log('complete in: ', time, ' ms; everage time: ', time / count);
	}

    var div = document.getElementById('result');
    
    function log() {
        div.innerHTML += '<br>';

        for (var i = 0, count = arguments.length; i < count; ++i) {
            div.innerHTML += arguments[i];
        }
    }

	var v1_count, v2_count;

	function solution_v1(input) {
		++v1_count;
		var openIndex = input.indexOf('{');

		if (openIndex === -1) return [input];

		var result = [''];

		while (openIndex !== -1) {
			var firstPart = input.substring(0, openIndex);
			var parts = [];

			var openCount = 0;

			for (var i = openIndex + 1, length = input.length; i < length; ++i) {
				if (input[i] === '{')
					++openCount;
				else if (input[i] === '}') {
					--openCount;

					if (openCount < 0) {
						parts.push(input.substring(openIndex + 1, i));

						input = input.slice(i + 1);
						break;
					}
				}
				else if (openCount === 0 && input[i] === '|') {
					parts.push(input.substring(openIndex + 1, i));

					openIndex = i;
				}
			}


			var newResult = [];

			parts.forEach(function (part)...