#javascript #google-apps-script
Вопрос:
Я пытаюсь взять какой-то текст в форме:
ONLINE TRANSACTION
PERSON2 , MAILBOXES , VIA ONLINE - PYMT , FP 03/04/21 10 , 34130520496279000N
306.00
ONLINE TRANSACTION
PERSON3 , COM BULDING 1391 , VIA ONLINE - PYMT , FP 10/04/21 10 , 59190636993136000N
7,200.00
AUTOMATED CREDIT
PERSON4 , GLEN 14 , FP 18/04/21 2028 ,
00151146632BBHGBLK
1,675.00
ONLINE TRANSACTION
A COMPANY , INS , VIA ONLINE - PYMT , FP 17/04/21 10 , 13221513368328000N
673.36
Данные были получены из PDF-файла с помощью документов Google, getTables
поэтому там есть несколько случайных пробелов и новых символов строк, которые помогают разделить каждую запись на 4 элемента:
TRANSACTION TYPE
PAYEE/CREDITOR
PAID IN
PAID OUT
В идеале я хочу вернуть 2d массив каждой записи с разделением каждого поддерева для каждого из вышеперечисленных элементов
Регулярное выражение, которое я придумал, /(.*)sn([wW]*?)n(n|[0-9,] .d{2}sn)(n|[0-9,] .d{2})/g
и, кажется, работает нормально regex101.com
, но я не могу понять, что использовать в javascript для получения результата. Я пробовал использовать split
amp; match
, но, похоже, получил только один результат, и он не разделился.
Заранее спасибо за любую помощь
EDIT1: Что-то получается с этим:
let regEx = /([^s].*)sn([wW]*?)n(n|[0-9,] .d{2}sn)(n|[0-9,] .d{2})/g;
let result = tableText.match(regEx)
let entries = result.map(result => {let retRes = result.split(regEx); retRes.pop(); retRes.shift(); return retRes;} );
Не совсем понимаю, почему я возвращаю массив из 6 элементов (отсюда pop
и shift
)
Комментарии:
1. Я просто скопировал и вставил текст, который вы опубликовали, в консоль, завернутый в обратные ссылки, а затем запустил предоставленный вами код за вычетом последней строки, и я получаю
result
массив из 4 элементов. Может быть, ваш вкладtableText
отличается от того, что вы опубликовали?2. Хмм. Да, мне интересно, есть ли там какие-нибудь хитрые специальные символы.
3. Можете ли вы сузить его до небольшого образца
tavleText
, чтобы воспроизвести проблему?