Текущее состояние выражения:
^(.*)\/(.*)(?=\s\[(\d{1,})\sиз\s(\d{1,})\])
Можно ли сделать так, что бы 3я и 4я группа не захватывались если их нет, а когда есть, то захватывать?
На данный момент если 3я или 4я группа отсутствует, то строка вообще не матчится.
Пример данных для тестов:
Триплексоголик ТВ-2 / xxxHolic: Kei [13 из 13]
Золотое Божество ТВ-2 / Golden Kamuy TV-2 [11 из 12]
Космический линкор Тирамису ТВ-2 / Uchuu Senkan Tiramisu TV-2 [12 из 13]
Шестизарядник / Six Shooter
Изначальный вариант:
/^([^\/]+)\/(.+?)(?=\[(\d+)\hиз\h(\d+)]|$)/m
В комментариях вы написали, что сделали небольшие изменения. Не совсем понимаю к чему эти изменения с добавлением квантификатора \W, а также в логике между выбором конца строки ($), и захватом 3-ей и 4-ой групп.
Если речь об избавлении выделенных групп от пробелов, то можно привести к такому виду:
/^([^\/]+)\s\/\s(.+?)(?=\s\[(\d+)\hиз\h(\d+)]|$)/m
См. демо регулярного выражения.
Подробны детали по выражению:
^ - начало строки([^\/]+) - первая группа, захватывает все до слэша (/)\s\/\s - два пробела, между которыми стоит слэш(.+?) - вторая захватывающая группа(?= - начало позитивного просмотра вперед
\s\[(\d+)\hиз\h(\d+)], или (|) же конец строки ($)) - конец позитивного просмотра впередСборка персонального компьютера от Artline: умный выбор для современных пользователей