Tom*_*tes 7 javascript regex jquery
我敢肯定这一定很容易,但我很难......
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]);
}
Run Code Online (Sandbox Code Playgroud)
上面的函数工作正常,但我确信必须可以通过引用使用.match()方法返回的数组的不同部分来实现单个正则表达式.我试过结合这些正则表达但没有成功.
另外,我没有在示例中使用字符串来测试它,因为console.log()在文件路径中转义反斜杠,它开始让我迷惑:)
小智 8
我知道这是一个老问题,但这是另一个解决方案,可以处理名称中的多个点,并且当根本没有扩展名时(或只是“.”的扩展名):
/^(.*?)(\.[^.]*)?$/
一次取一部分:
^
锚定到字符串的开头(以避免部分匹配)
(.*?)
懒惰地
匹配任何字符.,0次或多次(如果后面的可选扩展名可以匹配,则不要全部抓取),并将它们放入第一个捕获组中。 *?( )
(\.
使用 为扩展程序启动第二个捕获组(。该组以文字.字符开头(我们用它进行转义\,这样就.不会被解释为“匹配任何字符”)。
[^.]*
定义一个字符集[]。通过指定这是一个反向字符集来匹配不在该集中的字符^。匹配 0 个或多个非.字符以获得文件扩展名的其余部分*。我们以这种方式指定它,这样它就不会在早期的文件名上匹配,例如foo.bar.baz,错误地给出了包含多个点的扩展名,.bar.baz而不是仅仅.baz。
.不需要在内部转义[],因为所有内容(除了^)都是字符集中的文字。
)?
结束第二个捕获组)并指示整个组是可选的?,因为它可能没有扩展名。
$
锚定到字符串的末尾(同样,以避免部分匹配)
如果您使用的是 ES6,您甚至可以使用解构来获取 1 行结果:
[,filename, extension] = /^(.*?)(\.[^.]*)?$/.exec('foo.bar.baz');
文件名为'foo.bar',扩展名为'.baz'.
'foo'给予'foo' and ''
'foo.'给予'foo'给予和'.'
'.js''''.js'
假设所有文件都有扩展名,您可以使用
var regexAll = /[^\\]*\.(\w+)$/;
Run Code Online (Sandbox Code Playgroud)
那你可以做
var total = path.match(regexAll);
var filename = total[0];
var extension = total[1];
Run Code Online (Sandbox Code Playgroud)
/^.*\/(.*)\.?(.*)$/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
Run Code Online (Sandbox Code Playgroud)
即使您的文件名包含多个点或根本不包含点(没有扩展名),这也可以工作.
编辑:
这是为Linux,为Windows使用这个/^.*\\(.*)\.?(.*)$/g(在Linux目录分隔符是/在Windows中\)
您可以在正则表达式中使用组:
var regex = /^([^\\]*)\.(\w+)$/;
var matches = filename.match(regex);
if (matches) {
var filename = matches[1];
var extension = matches[2];
}
Run Code Online (Sandbox Code Playgroud)