在JavaScript中,我可以使用此正则表达式 ([^\/]+)(\.[^\.\/]+)$
来捕获URL中的文件名 . 它适用于以下情况:
http://a.com/b/file.name.ext
http://a.com/b/file.name.ext#hash
http://a.com/b/file.name.ext?query
但是如果没有扩展名则无法匹配:
没有比赛
http://a.com/b/filename
http://a.com/b/filename#hash
http://a.com/b/filename?query
这个是正常的 . 第二个捕获组希望最后有一个 .ext
块 .
如果我让第二个捕获组可选...
`([^\/]+)(\.[^\.\/]+)?$`
...然后第一个捕获组变得贪婪,并包括 .ext
结尾,我不想要 . 正则表达式引擎如何考虑可选的第二组?如何使扩展名存在可选?
注意:此正则表达式不适用于具有以下结构的URL:
http://a.com/b/filename?query=a.b
http://a.com/b/filename.ext?query=a.b
在我的情况下,点将永远不会出现在URL中 .
2 回答
如果你想要纯正则表达式(=理论计算机科学中的漂亮和干净的常规语言表达,再加上捕获组),那么你可以使用其他组来完成:
并识别组1和2.组3是可选的扩展 .
另一种可能性
在这里,您将使用组4作为扩展名,并将组1和3的串联作为文件名 . 第2组仅用于制备3和4的化合物 .
经测试:
参考文献:
lastindexof
split
substr
replace