регулярное выражение для выделения имени файла и версии

Есть имена файла, которые состоят из двух частей - имя, содержащее буквы, цифры и тире, а также версия - всё, что идёт потом

Для выделения имени и версии использую простую регулярку

^([a-zA-Z_-]+)(.*)$

Подскажите, как её модифицировать, чтобы

  1. если между именем и версией стоят тире, то они игнорируются (не включаются в имя)
  2. если название файла заканчивается на .tar, то игнорируется .tar (не включается в версию)

Понятно, что это можно сделать уже после получения имени и версии очень легко, но хочется именно в рамках одной регулярки

Т.е. чтобы для

my-file-test-1x1.-.121.tar

my-file-test-1x1.-.121

my-file-test1x1.-.121

my-file-test----1x1.-.121

my-file-test-1x1.-.121

во всех случаях было бы имя my-file-test, и версия 1x1.-.121


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

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

во всех случаях было бы имя my-file-test, и версия 1x1.-.121

Предложу такой вариант...

const a = [
    'my-file-test-1x1.-.121.tar',
    'my-file-test-1x1.-.121',
    'my-file-test1x1.-.121',
    'my-file-test----1x1.-.121',
    'my-file-test-1x1.-.121',
  'my-file---xxxx-test-1x1.-.121'
]
const r = /^(-*[a-z]+){3}|\d.+\d+(?=\.tar|$)/g
a.forEach(v => console.log(v.match(r)))

→ Ссылка