[英]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
的属性host
, pathname
, search
, hash
等:
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.