我相信这一定很简单,但我在努力...
var regexFileName = /[^\\]*$/; // match filename
var regexFileExtension = /(\w+)$/; // match file extension
function displayUpload() {
var path = $el.val(); //This is a file input
var filename = path.match(regexFileName); // returns file name
var extension = filename[0].match(regexFileExtension); // returns extension
console.log("The filename is " + filename[0]);
console.log("The extension is " + extension[0]);
}上面的函数运行得很好,但我确信它必须能够用一个正则表达式来实现,通过引用.match()方法返回的数组的不同部分来实现。我尝试组合这些正则表达式,但没有成功。
此外,我没有在示例中使用字符串对其进行测试,因为console.log()转义了文件路径中的反斜杠,这让我开始感到困惑:)
发布于 2012-01-25 19:04:26
假设所有文件都有一个扩展名,您可以使用
var regexAll = /[^\\]*\.(\w+)$/;然后你可以这样做
var total = path.match(regexAll);
var filename = total[0];
var extension = total[1];发布于 2012-01-25 19:03:15
第一组后的/^.*\/(.*)\.?(.*)$/g是您的文件名,第二组是扩展名。
var myString = "filePath/long/path/myfile.even.with.dotes.TXT";
var myRegexp = /^.*\/(.*)\.(.*)$/g;
var match = myRegexp.exec(myString);
alert(match[1]); // myfile.even.with.dotes
alert(match[2]); // TXT即使你的文件名包含一个以上的点或者根本不包含点(没有扩展名),这也是有效的。
编辑:
这是针对linux的,对于windows使用这个/^.*\\(.*)\.?(.*)$/g (在linux中目录分隔符是/在windows中是\ )
发布于 2012-01-25 19:05:31
您可以在正则表达式中使用组来实现以下目的:
var regex = /^([^\\]*)\.(\w+)$/;
var matches = filename.match(regex);
if (matches) {
var filename = matches[1];
var extension = matches[2];
}https://stackoverflow.com/questions/9001557
复制相似问题