Regex Найти имя файла без расширения, включая исключения, такие как tar.gz - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь разобрать имя файла по URL (например, .tar.gz или .zip). Например,

*URL:* https://files.pythonhosted.org/packages/00/51/f3afa784d73d1f35dce99f6138eaa779e2098a8dde4e7085ecf6295254bb/google-cloud-storage-1.13.0.tar.gz

*Desired Output:* google-cloud-storage-1.13.0

*URL:* https://files.pythonhosted.org/packages/00/51/f3afa784d73d1f35dce99f6138eaa779e2098a8dde4e7085ecf6295254bb/google-cloud-storage-1.13.0.zip

*Desired Output:* google-cloud-storage-1.13.0

Пока что с Javascript у меня есть следующее:

tar_name = url.split('/').pop().replace(/\..+$/, '');

, которое не работает, если в имени файла есть точки.

Любая помощь относительно того, как получить имя файла из такого URL-адреса с javascript, приветствуется. Спасибо.

1 Ответ

1 голос
/ 14 февраля 2020

Можно указать один вариант c и заменить деталь, заканчивающуюся на .tar.gz или .zip, пустой строкой.

(?:\.tar\.gz|\.zip)$

Regex demo

["https://files.pythonhosted.org/packages/00/51/f3afa784d73d1f35dce99f6138eaa779e2098a8dde4e7085ecf6295254bb/google-cloud-storage-1.13.0.tar.gz",
  "https://files.pythonhosted.org/packages/00/51/f3afa784d73d1f35dce99f6138eaa779e2098a8dde4e7085ecf6295254bb/google-cloud-storage-1.13.0.zip"
].forEach(url => {
  url = url.split('/').pop().replace(/(?:\.tar\.gz|\.zip)$/, '');
  console.log(url);
});

Или вы можете, например, захватить цифры, разделенные точками в конце, и сопоставить символы az, следующие за сохранением группы 1 в замене.

(\d+(?:\.\d+)+)\.[a-z]+(?:\.[a-z]+)*$

Regex demo

["https://files.pythonhosted.org/packages/00/51/f3afa784d73d1f35dce99f6138eaa779e2098a8dde4e7085ecf6295254bb/google-cloud-storage-1.13.0.tar.gz",
  "https://files.pythonhosted.org/packages/00/51/f3afa784d73d1f35dce99f6138eaa779e2098a8dde4e7085ecf6295254bb/google-cloud-storage-1.13.0.zip"
].forEach(url => {
  url = url.split('/').pop().replace(/(\d+(?:\.\d+)+)\.[a-z]+(?:\.[a-z]+)*$/, "$1");
  console.log(url);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...