繁体   English   中英

使用正则表达式或Javascript从URL获取文件名

[英]Get filename from URL using Regular Expressions or Javascript

我需要从URL地址获取文件名。

以下是标准:

它需要在以下场景中返回空字符串""

http://somedomain.com
http://www.somedomain.com
http://somedomain.com/
http://www.somedomain.com/

并在以下场景中返回filename.php:

http://somedomain.com/filename.php?query
http://www.somedomain.com/filename.php?query
http://somedomain.com/filename.php#query
http://www.somedomain.com/filename.php#query

我找到了这个正则表达式

[\\w_.-]*?(?=[\\?\\#])|[\\w_.-]*$来自这里

但它会在输入http://somedomain.com上返回somedomain.com 我无法弄清楚如何在没有/结束时修改它来忽略域。

如果使用正则表达式很难,我也会欣赏JavaScript解决方案。

Thanx提前。

假设您正在浏览器中编写脚本,那么您已经拥有了一个功能齐全的URL解析器,您可以利用它,而无需编写不可靠的不完整regexen。 使用HTMLAnchorElement读取类似location的属性hostpathnamesearchhash等:

var a= document.createElement('a');
a.href= 'http://somedomain.com/dirname/filename.php?query';
var filename= a.pathname.split('/').pop(); // filename.php

这将文件名放在$1[^:]+://[^/]+/?([^?#]*)

(ps http://rentzsch.github.com/JSRegexTeststand/是你进行此类测试的朋友)

使用Reg ex的这个调整版本:(添加\\ /到现有版本)

[\w_.-]*?(?=[\/\?\#])|[\w_.-]*$
function returnPHPname(x) {
    var fileName = x.split(/[#\?]/).shift().split('/').pop()
    return fileName.slice(-3) == 'php'? fileName: ""
}

split(/[#\\?]/) 拆分输入'#'或'?' 通过正则表达式字符类
shift() 转移出从分裂输入“最左边的”元件。
split('/')在每个斜杠上拆分此元素并返回一个数组。
pop()将数组的“最顶层”元素作为文件名弹出
slice(-3) 断从文件名最后三个字符来检查..
'php'? fileName: "" 'php'? fileName: "" 'php'返回文件名,否则为空字符串。

请注意' \\? '在正则表达式中被转义为字符而不是正则表达式运算符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM