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]
一个字符。
例如
foobar.a
foobar.txt
foobar.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