Как написать регулярку, которая выберет из текста только некоторые цифры

Ниже даны три строки текста, из этого текста нужно выбрать только те цифры, которые идут после слова file и собрать их в массив.

Текст который будет записан в файл с именем file1.txt (level-3.js)
Текст который будет записан в файл с именем file12.txt (level-3.js)
Текст который будет записан в файл с именем file123.txt (level-3.js)

Больше часа уже бьюсь, пробовал генераторы регулярок, но увы ничего не помогает. Максимум что я смог это написать вот это:

const allData = (data1 + data2 + data3)
          .replace(/[^[0-9]/g, ' ')
          .split(' ')
          .filter((item) => item !== '');

//В data1, data2, data3 соответственно те 3 строки, выше.

Но проблема в том, что эта регулярка захватывает цифру 3, идущую за level-


Ответы (1 шт):

Автор решения: InDevX

Можно использовать позитивную ретроспективную (lookbehind) проверку и опережающую (lookahead) проверку.

  • позитивная ретроспективная проверка:

(?<=expr1)expr2 - ищет совпадение с expr2 при условии, что перед ним находится expr1.

  • опережающая проверка:

expr1(?=expr2) - ищет совпадение с expr1 при условии, что после него следует expr2

const data1 = 'Текст который будет записан в файл с именем file1.txt (level-3.js)';
const data2 = 'Текст который будет записан в файл с именем file12.txt (level-3.js)';
const data3 = 'Текст который будет записан в файл с именем file123.txt (level-3.js)';

const full = data1 + data2 + data3;

const result = full.match(/(?<=file)(\d+)(?=\.txt)/g);

console.log(result);

→ Ссылка