正则表达式匹配URL末尾的文件名

Regex to match filename at end of URL

本文关键字:文件名 URL 正则表达式      更新时间:2023-09-26

使用以下文字:

http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg

和其他类似的文本,其中最后一个1可以是任何其他数字,最后一个44也可以是任何其他数字,我需要一个匹配/1t44.jpg的正则表达式。

到目前为止,我所尝试的所有内容(/.+?'.([^'.]+)$)都与第一个斜杠(//img.oo.com.au/prod/CRWWBGFWG/1t44.jpg)匹配。

我使用的是JavaScript,所以RegexPal上的任何工作都应该做。

下面是一个简单的正则表达式,它将匹配最后一个/之后的所有内容:

/[^/]*$

如果您希望将文件名与特定的文件扩展名相匹配,您可以使用如下命令:

/'/'dt'd'd'.jpg$/

这比赛:

  • /
  • 后接数字
  • 后接字母"t"
  • 后面跟着两位数字
  • 在字符串
  • 的末尾跟着'.jpg'

或者,如果你真的只想要文件名(最后一个斜杠后面的任何文件扩展名),那么你可以使用这个:

/'/[^'/]+$/

这比赛:

  • /
  • 后接一个或多个非斜杠字符
  • 字符串末尾的

http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg的示例字符串中,这两个都将匹配/1t44.jpg。第一种显然限制更大,因为它需要文件名的特定格式。第二个匹配任何文件名。


其他选择。在node.js开发中,您可以使用path模块和path.parse()将路径分解为所有不同的组件。

并且,有各种为浏览器编写的库也会将路径分解为其组件

正如Johnsyweb所说,这里并不真正需要正则表达式。我想最快的方法是使用lastIndexOfsubstr

str.substr(str.lastIndexOf('/'));

当然你不必使用正则表达式来split一个字符串和pop的最后一部分:

var str="http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg";
var parts = str.split("/");
document.write(parts.pop() + "<br />");

根据Scott的回答,尝试如下:(JavaScript)

var url = "http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg";
var path           = url.replace(/(.*)(['''/][^'''/]*$)/, "$1" );
var lastElement    = url.replace(/(.*)(['''/][^'''/]*$)/, "$2" );

这也可以匹配Windows/Nix文件路径,提取文件名或文件路径:

c:'Program Files'test.js => c:'Program Files
c:'Program Files'test.js => 'test.js

这是针对Linux机器上的Java的。它获取文件路径的最后一部分,以便它可以用于创建文件锁。

// String to be scanned to find the pattern.
String pattern = ".*?([^/.]+)*$";
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher match = r.matcher("/usr/local/java/bin/keystore");
/**
* Now you have two matches
* #0    /usr/local/java/bin/keystore
* #1    keystore
*/
String fileLock = "";
if (match.find()) {
    fileLock = match.group(1) + ".lock";
}

我知道和原来的问题有点不同。但我希望这能帮助到那些和我有同样问题的人。