在JavaScript中,我可以使用这个正则表达式
然而,如果没有文件扩展名,它将无法匹配:
无匹配
这很正常。第二个捕获组期望在结尾处有一个
如果我将第二个捕获组设置为可选...
在我的情况下,URL中不会再出现点。
([^\/]+)(\.[^\.\/]+)$
来仅捕获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中不会再出现点。
([^\/.]+)
- Jo So([^\/.]+)$|([^\/]+)(\.[^\/.]+)$
对我有效(在第一个替代方案后加上$
)。如果您愿意将其作为答案给出,我可以为您提供积分。 - James Newtonhttp://a.com/b/filen.ame
中,无法判断ame
是名称的一部分还是扩展名!!(除非您提供允许的扩展名列表) - Enissay