Javascript正则表达式匹配/解压缩文件扩展名

以下正则表达式

var patt1=/[0-9a-z]+$/i;

提取字符串的文件扩展名,如

filename-jpg
filename#gif
filename.png

如何修改这个正则表达式只返回一个扩展,当字符串真的是一个点作为分隔符的文件名? (显然filename#gif不是普通文件名)

更新基于tvanofsson的评论,我想澄清,当JS函数接收到字符串时,字符串已经包含一个文件名,没有空格,没有点和其他特殊字符(它实际上将被处理一个slug ))。 这个问题并不是解析文件名,而是错误地解析了slug - 当它被赋予“filename-jpg”时,函数返回一个“jpg”的扩展名,当它真的返回null或空字符串时,这就是需要的行为纠正。


只需添加一个. 到正则表达式

var patt1=/.[0-9a-z]+$/i;

因为这个点是正则表达式中的一个特殊字符,所以您需要将其转义为与字面匹配: .

您的模式现在将匹配以点结尾的任何字符串,后跟至少一个[0-9a-z]一个字符。

例如

foob​​ar.a
foob​​ar.txt
foob​​ar.foobar1234

如果您想将扩展名限制为一定数量的字符,则需要替换+

var patt1=/.[0-9a-z]{1,5}$/i;

将允许点后至少1个,最多5个字符。


尝试

var patt1 = /.([0-9a-z]+)(?:[?#]|$)/i;

此RegExp对于从URL中提取文件扩展名非常有用 - 甚至包含?foo=1查询字符串和#hash结尾的文件扩展名。

它也将为您提供扩展名为$1

var m1 = ("filename-jpg").match(patt1);
alert(m1);  // null

var m2 = ("filename#gif").match(patt1);
alert(m2);  // null

var m3 = ("filename.png").match(patt1);
alert(m3);  // [".png", "png"]

var m4 = ("filename.txt?foo=1").match(patt1);
alert(m4);  // [".txt?", "txt"]

var m5 = ("filename.html#hash").match(patt1);
alert(m5);  // [".html#", "html"]

@stema的PS + +1为涉及的一些RegExp语法基础提供了很好的建议。


示例列表:

var fileExtensionPattern = /.([0-9a-z]+)(?=[?#])|(.)(?:[w]+)$/gmi
//regex flags -- Global, Multiline, Insensitive

var ma1 = 'css/global.css?v=1.2'.match(fileExtensionPattern)[0];
console.log(ma1);
// returns .css

var ma2 = 'index.html?a=param'.match(fileExtensionPattern)[0];
console.log(ma2);
// returns .html

var ma3 = 'default.aspx?'.match(fileExtensionPattern)[0];
console.log(ma3);
// returns .aspx

var ma4 = 'pages.jsp#firstTab'.match(fileExtensionPattern)[0];
console.log(ma4);
// returns .jsp

var ma5 = 'jquery.min.js'.match(fileExtensionPattern)[0];
console.log(ma5);
// returns .js

var ma6 = 'file.123'.match(fileExtensionPattern)[0];
console.log(ma6);
// returns .123

测试页面。

链接地址: http://www.djcxy.com/p/46937.html

上一篇: Javascript regex for matching/extracting file extension

下一篇: Getting file extension using pattern matching in python