регулярное выражение для выделения имени файла и версии
Есть имена файла, которые состоят из двух частей - имя, содержащее буквы, цифры и тире, а также версия - всё, что идёт потом
Для выделения имени и версии использую простую регулярку
^([a-zA-Z_-]+)(.*)$
Подскажите, как её модифицировать, чтобы
- если между именем и версией стоят тире, то они игнорируются (не включаются в имя)
- если название файла заканчивается на
.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)))