Как вывести не статическую информацию в методе .replace? JS
Я загрузил текстовый файл через input и через метод replace создал объекто-подобный текст и разделил их на отдельные объекты, но в итоге получил кучу объектов с одинаковой переменной: Изначально текст выглядит так:
Таких секций Документов больше 100 , после преобразования данным кодом:
public onChange(fileList: FileList): void {
let file = fileList[0];
let fileReader: FileReader = new FileReader();
let self = this;
fileReader.onloadend = function(x) {
self.fileContent = fileReader.result;
const arrFile = (self.fileContent)
if (/1CC/gi) {
const str1 = arrFile
.replace(/КонецРасчСчет|КонецДокумента/g,'}')
.replace(/=/g,":'")
.replace(/1CClientBankExchange/g,`let infoDockumentArr = {`)
.replace(/СекцияДокумент/g,`let dockumentArr = {`)
.replace(/СекцияРасчСчет/g,'} \nlet infoArr = {')
.replace(/\r/g, "',")
.replace(/Номера/g, 'Number')
.replace(/Номер:/g, 'docNumber:')
.replace(/Дата:/g,'docDate:')
.replace(/Сумма:/g,'sum:')
.replace(/Списано:/g,'Decommissioned:')
.replace(/Поступило/g,'Received')
.replace(/Плательщик:/g,'payer:')
.replace(/Плательщик1:/g, 'payer1:')
.replace(/Плательщик/g, 'payer')
.replace(/Счет:/g, 'Account:')
.replace(/ИНН:/g, 'Inn:')
.replace(/Расч/g, 'checking')
.replace(/Кор/g, 'Correspondent')
.replace(/БИК:/g,'Bic:')
.replace(/Банк1:/g, 'Bank1:')
.replace(/Получатель/g, 'recipient')
.replace(/Получатель1/g, 'recipient1')
.replace(/КПП:/g, 'Kpp:')
.replace(/Вид/g, 'type')
.replace(/Оплаты:/g, 'OfPayment:')
.replace(/Назначение/g, 'purposeOf')
.replace(/Платежа:/g, 'Payment:')
.replace(/Очередность:/g, 'priority:')
.replace(/Код/g, 'code')
.replace(/ВерсияФормата/g, 'version')
.replace(/Формата/g, 'Format')
.replace(/ировка/g, 'Type')
.replace(/Отправитель/g, 'Sender')
.replace(/Создания/g, 'Create')
.replace(/Время/g, 'time')
.replace(/Начала/g, 'Start')
.replace(/Конца/g, 'End')
.replace(/Начальный/g, 'elementary')
.replace(/Конечный/g, 'finite')
.replace(/Остаток/g, 'Remainder')
.replace(/Всего/g, 'total')
.replace(/Поступило/g, 'Received')
.replace(/Статус/g, 'status')
.replace(/Составителя/g, 'Сompiler')
.replace(/Показатель/g, 'indicator')
.replace(/КБК/g, 'KBK')
.replace(/ОКАТО/g, 'OKATO')
.replace(/Основания/g, 'Foundations')
.replace(/Периода/g, 'Period')
.replace(/Даты/g, 'Date')
.replace(/Типа/g, 'Type')
.replace(/КонецФайла/g, '')
.replace(/:'Платежное поручение',/g, '')
.replace(/:'Банковский ордер',/g, '')
.replace(/:'Платежный ордер',/g, '')
.replace(/{',/g, '{')
.replace(/}',/g, '}')
.replace(/[^\S]',/g, '')
console.log(str1);
}
}
fileReader.readAsText(file);
}
}
После выполнения кода, текст принимает формат:
Как видите, каждый объект имеет одну и ту же переменную. Могу ли я как то добавить Уникальный ID для каждой новой переменной? Пробовал через цикл, но цикл уходил в бесконечность, Возможно что то не так написал в коде. Буду благодарен даже за совет , куда стоит копать. Спасибо!
Ответы (1 шт):
Фунция replace может принимать фунцию
str.replace(regexp|substr, newSubStr|function[, flags])
У функции есть такие аргументы:
function replacer(match, p1, p2, p3, offset, string) {
// match - найденное
// p1 - группа 1, p2 - группа 2, p3 - группа 3 ...
return [p1, p2, p3].join(' - ');
}
let a = 'a a a a';
let count = 0;
a = a.replace(/a/gi, function(t){
const res = `object${count}`;
count++;
return res;
});
console.log(a)

