Ответ 1
Еще одно решение:
url.replace(/^.*\/|\.[^.]*$/g, '')
Я хочу извлечь базовое имя из URL-адреса изображения в Javascript. Кто-нибудь захочет дать мне руку на Regex?
Правило:
вернуть все справа от последнего /
слева от последнего .
www.domain.com/images/ image.hires.jpg
Если нет .
, верните полное базовое имя
www.domain.com/images/ image_hi_res
У меня неуклюжий /\/[^.]+\.[^.]+$/
, но не знаю, как сделать опции /
и .
опционными и как искать только последний .
.
Приветствую всех людей за большой вклад, как всегда. Я выбрал одно Regex, которое работало для меня из коробки.
Еще одно решение:
url.replace(/^.*\/|\.[^.]*$/g, '')
В этом случае я бы не использовал регулярное выражение, а просто lastIndexOf
и substring
. Что-то вроде
function findBaseName(url) {
var fileName = url.substring(url.lastIndexOf('/') + 1);
var dot = fileName.lastIndexOf('.');
return dot == -1 ? fileName : fileName.substring(0, dot);
}
Попробуйте это регулярное выражение:
/([^/]+(?=\.[^/.]*$)|[^/.]+$)/
В ваших примерах, предполагая, что входная строка является полным URL-адресом и не более того, у меня был успех с
/\/[^\/]+(?=\.[^.]+$)|\/[^\/]+$/
Это сначала пытается совместить все с последнего /
до последнего .
; если нет точки, она будет пытаться совместить все с последнего /
до конца строки.
Ведущий /
содержится в совпадении (JavaScript не поддерживает lookbehind, иначе я мог бы использовать это), поэтому вам нужно отрубить первый символ совпадения.
Когда у вас есть доступ к DOM, вы можете использовать собственные HTMLHyperlinkElementUtils
свойства тега <a>
:
function urlInfo (url) {
var props = 'hash host hostname href origin password pathname port protocol username search';
if (!window.urlInfoAnchorElement)
window.urlInfoAnchorElement = document.createElement('a');
urlInfoAnchorElement.href = url;
return props.split(' ').reduce(function (m, v, i) {
m[v] = urlInfoAnchorElement[v]; return m;
}, {});
}
// Example:
urlInfo('http://localhost:4000/guidelines/7yQxvndK?get=sup&love=1#oiwjef');
/* => {
hash: "#oiwjef"
host: "localhost:4000"
hostname: "localhost"
href: "http://localhost:4000/guidelines/7yQxvndK?get=sup&love=1#oiwjef"
origin: "http://localhost:4000"
password: ""
pathname: "/guidelines/7yQxvndK"
port: "4000"
protocol: "http:"
search: "?get=sup&love=1"
} */
Я рекомендую использовать activex FileSystemObject. Конечно, вам нужно отметить это как безопасное в реестре, чтобы выполнить его без экранов nag, но это очень полезно. Функция вашего звонка... GetBaseName делает то, что вы хотите.