Как правильно вывести строки внутри скобки (из подмассива)
Есть такой код:
var textt = "Текст 1, текст 2, текст 3, текст 4 текст 5";
var wordArr = [["а", "б", "в"], ["г", "д", "е"], ["ж", "з", "и"], ["к", "л", "м"]];
var res = textt.match(/текст/gi); /*ищем совпадние*/
var lenres = res.length; /*количество совпадений*/
/*Проходим по циклу*/
for(var i = 0; lenres>i; i++){
if(res != undefined){
//Составляем регулярное выражение
textt = textt.replace(new RegExp(textt, 'giu'),function(full_text){
var ArrPrep = "";
/*с помощью второго циклу добавляем запятые для строк внутри скобки*/
for(var k = 0; wordArr.length > k; k++){if(wordArr.length-2 >= k){var wordBaseZap = ", "}else{var wordBaseZap = ""} ArrPrep+= wordArr[k]+wordBaseZap;}
//Выводим ответ
return full_text +"("+ ArrPrep +")";
});
}
}
textt; /*Результат*/
Получается такой ответ:
Текст 1, текст 2, текст 3, текст 4, текст 5(а,б,в, г,д,е, ж,з,и, к,л,м)
Как переделать код так, чтобы получился такой ответ:
Текст 1(а,б,в), текст 2(г,д,е), текст 3(ж,з,и), текст 4(к,л,м), текст 5(а,б,в)
Ответы (2 шт):
Автор решения: Dim_K
→ Ссылка
Вы написали немного неправильную логику. Суть в том, что не надо хранить найденные кусочки текста, чтоб затем с помощью дополнительного регулярно выражения искать их снова и заменять. Во-первыйх, поиск уже выполнен, и повторно смысла сделать нет. Во-вторых, может оказаться что новый поиск найдет другое совпадение и подставит новый текст туда. Я предлагаю сделать замены сразу
var textt = "Текст 1, текст 2, текст 3, текст 4 текст 5";
var wordArr = [["а", "б", "в"], ["г", "д", "е"], ["ж", "з", "и"], ["к", "л", "м"]];
textt = textt.replace(/(текст\s+)(\d+)/ig, function(match, p1,p2) {
return p1 + p2 + '(' + wordArr[(p2 - 1) % wordArr.length ].join(', ') +')';
});
Автор решения: doox911
→ Ссылка
Вам необходимо будет определиться, что делать если кол-во элементов(в texts и wordArr) не совпадают.
const regex = /Текст [0-9]/gi;
const texts = "Текст 1, текст 2, текст 3, текст 4 текст 5".match(regex);
const wordArr = [["а", "б", "в"], ["г", "д", "е"], ["ж", "з", "и"], ["к", "л", "м"]];
const result = [];
for (let i = 0; i < texts.length; i++) {
console.log(`${texts[i]} (${wordArr[i]})`);
result.push(`${texts[i]} (${wordArr[i]})`);
}
console.log(result.join(', '));