Ответ 1
Вы можете заключить ту часть, которую вы хотите сопоставить, в группе, не участвующей в записи: (?:)
. Затем его можно рассматривать как единое целое в регулярном выражении, а затем вы можете поместить a ?
после него, чтобы сделать его необязательным. Пример:
/Singers?:(.*)\s?(?:Lyricists?:(.*))?/
Обратите внимание, что здесь \s?
бесполезен, так как .*
будет жадно употреблять все символы, и никакого возврата не потребуется. Это также означает, что часть (?:Lyricists?:(.*))
никогда не будет сопоставлена по той же причине. Вы можете использовать не жадную версию .*
, .*?
вместе с $
, чтобы исправить это:
/Singers?:(.*?)\s*(?:Lyricists?:(.*))?$/
Некоторые дополнительные пробелы заканчиваются захватом; это также можно удалить, давая окончательное регулярное выражение:
/Singers?:\s*(.*?)\s*(?:Lyricists?:\s*(.*))?$/