使用正则表达式或Javascript从URL获取文件名
我需要从URL地址获取文件名 标准如下: 在以下情况下,它需要返回空字符串使用正则表达式或Javascript从URL获取文件名,javascript,regex,url,filenames,Javascript,Regex,Url,Filenames,我需要从URL地址获取文件名 标准如下: 在以下情况下,它需要返回空字符串“”: http://somedomain.com http://www.somedomain.com http://somedomain.com/ http://www.somedomain.com/ http://somedomain.com/filename.php?query http://www.somedomain.com/filename.php?query http://somedomain.com/fi
“”
:
http://somedomain.com
http://www.somedomain.com
http://somedomain.com/
http://www.somedomain.com/
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
并在以下情况下返回filename.php:
http://somedomain.com
http://www.somedomain.com
http://somedomain.com/
http://www.somedomain.com/
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\.-]*$
from
但是,它在输入时返回somedomain.com
http://somedomain.com。当域的末尾没有/
时,我不知道如何修改它以忽略域
如果正则表达式很难使用,我也会很欣赏JavaScript解决方案
提前使用Thanx。使用这个经过调整的Reg ex版本:(添加\/到现有版本中)
这将把文件名放在
$1
:[^::+://[^/]+/?([^?#]*)
(p.s.是您进行此类测试的朋友)假设您在浏览器中编写脚本,那么已经有一个功能齐全的URL解析器供您利用,而无需编写不可靠的不完整正则表达式。使用HTMLanchoreElement读取
位置
-如属性主机
,路径名
,搜索
,哈希
等:
var a= document.createElement('a');
a.href= 'http://somedomain.com/dirname/filename.php?query';
var filename= a.pathname.split('/').pop(); // filename.php
split(/[\?]/)
regex对“\\”或“?”的输入。shift()
从拆分的输入中取出“最左边”的元素。split('/')
在每个斜杠上拆分此元素并返回一个数组。pop()
数组中作为文件名的“最顶端”元素。slice(-3)
从文件名中去掉最后三个字符以进行检查。'php'?文件名:“
“php”返回文件名,否则返回空字符串
请注意,中的“
\?
”转义为字符,而不是正则表达式运算符。谢谢。这很好,但是我最终使用了bobince的解决方案。我认为它更简单。请在你的答案中添加一个解释,而不仅仅是代码本身。虽然这段代码片段可能是解决方案,但确实有助于提高你文章的质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。比您!这个时间更短了。现在也解释一下。但我无法解释为什么我遗漏了这个解释:PInteresting数组上的函数如何更改数组,但string上的函数不更改字符串,而是返回字符串的新更改。所以slice将保留文件名。但是x在每一步都会改变,你实际上可以把这些部分存储在变量中。