Использование регулярного выражения для разделения текстовой строки при каждом появлении шаблона, а затем в пределах совпадения

#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 , чтобы воспроизвести проблему?