我正在尝试编写一个正则表达式来从URL中获取文件名(如果存在).
这是我到目前为止:
(?:[^/][\d\w\.]+)+$
Run Code Online (Sandbox Code Playgroud)
所以从网址上http://www.foo.com/bar/baz/filename.jpg,我应该匹配filename.jpg
不幸的是,我在最后一次之后匹配/.
我怎样才能收紧它所以它只能抓住它,如果它看起来像文件名?
Jan*_*kis 27
上面的示例无法从此URL获取文件名"file-1.name.zip":
"http://sub.domain.com/sub/sub/handler?file=data/file-1.name.zip&v=1"
Run Code Online (Sandbox Code Playgroud)
所以我创建了我的REGEX版本:
[^/\\&\?]+\.\w{3,4}(?=([\?&].*$|$))
Run Code Online (Sandbox Code Playgroud)
说明:
[^/\\&\?]+ # file name - group of chars without URL delimiters
\.\w{3,4} # file extension - 3 or 4 word chars
(?=([\?&].*$|$)) # positive lookahead to ensure that file name is at the end of string or there is some QueryString parameters, that needs to be ignored
Run Code Online (Sandbox Code Playgroud)
小智 16
这个适合我.
(\w+)(\.\w+)+(?!.*(\w+)(\.\w+)+)
Run Code Online (Sandbox Code Playgroud)
小智 9
(?:.+\/)(.+)
Run Code Online (Sandbox Code Playgroud)
选择所有直到最后一个正斜杠(/),捕获此正斜杠后的所有内容.使用子图案$ 1.
非Pcre
(?:[^/][\d\w\.]+)$(?<=\.\w{3,4})
Run Code Online (Sandbox Code Playgroud)
PCRE
(?:[^/][\d\w\.]+)$(?<=(?:.jpg)|(?:.pdf)|(?:.gif)|(?:.jpeg)|(more_extension))
Run Code Online (Sandbox Code Playgroud)
由于您使用regexpal.com基于javascript的测试(不支持lookbehind),请尝试使用它
(?=\w+\.\w{3,4}$).+
Run Code Online (Sandbox Code Playgroud)
我正在使用这个:
(?<=\/)[^\/\?#]+(?=[^\/]*$)
Run Code Online (Sandbox Code Playgroud)
解释:
(?<=): 正面看后面,断言一个字符串有这个表达式,但不匹配它。
(?<=/):字面正斜杠“/”的正面查找,这意味着我正在寻找前面的表达式,但与正斜杠不匹配。
[^/\?#]+:一个或多个不是“/”、“?”的字符 或“#”,剥离搜索参数和哈希。
(?=[^/]*$):积极向前看任何不匹配斜线的东西,然后匹配行尾。这是为了确保选择最后一个正斜杠段。
用法示例:
(?<=\/)[^\/\?#]+(?=[^\/]*$)
Run Code Online (Sandbox Code Playgroud)