在Javascript中的URL中查找基名称
我想从Javascript中的图像URL中提取基本名称。有人能帮我弄一下正则表达式吗 规则是:在Javascript中的URL中查找基名称,javascript,regex,Javascript,Regex,我想从Javascript中的图像URL中提取基本名称。有人能帮我弄一下正则表达式吗 规则是: 返回最后一个/左边的所有内容 www.domain.com/images/image.hires.jpg 如果未找到,请返回完整的基本名称 www.domain.com/images/image\u hi\u res 我有一个笨拙的/\/[^.]+\.[^.]+$/,但不知道如何使/和可选,以及如何仅查找最后一个 一如既往,为所有伟大的投入干杯。我选择了一个现成的正则表达式 请尝试以下正则表达式:
- 返回最后一个
左边的所有内容 www.domain.com/images/image.hires.jpg/
- 如果未找到
,请返回完整的基本名称 www.domain.com/images/image\u hi\u res
/\/[^.]+\.[^.]+$/
,但不知道如何使/
和
可选,以及如何仅查找最后一个
一如既往,为所有伟大的投入干杯。我选择了一个现成的正则表达式
请尝试以下正则表达式:
/([^/]+(?=\.[^/.]*$)|[^/.]+$)/
在您的示例中,假设输入字符串是整个URL,仅此而已,我在
/\/[^\/]+(?=\.[^.]+$)|\/[^\/]+$/
首先尝试匹配从最后一个/
到最后一个
的所有内容;如果没有点,它将尝试匹配从最后一个/
到字符串末尾的所有内容
前导的
/
包含在匹配中(JavaScript不支持lookbehind,否则我可以使用它),因此您需要切掉匹配的第一个字符。在这种情况下,我实际上不会使用正则表达式,而只需使用lastIndexOf
和子字符串。差不多
function findBaseName(url) {
var fileName = url.substring(url.lastIndexOf('/') + 1);
var dot = fileName.lastIndexOf('.');
return dot == -1 ? fileName : fileName.substring(0, dot);
}
另一个解决方案:
url.replace(/^.*\/|\.[^.]*$/g, '')
我建议使用FileSystemObject activex。当然,您需要在注册表中将它标记为安全的,以便在没有nag屏幕的情况下执行它,但它非常有用。你的电话。。。GetBaseName函数执行您想要的操作。当您有权访问DOM时,您可以使用
标记的本机HTMLHyperlinkElementUtils
属性:
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"
} */
这将消除跨平台和跨浏览器的兼容性,但收益相对较小。@这仅适用于新的TLD如果您需要当前url,请使用上面的函数,如下所示:findBaseName(window.location.href);