1

您好,我需要将文件名与扩展名匹配。

问题是路径既可以是 unix 也可以是 windows,因此由 / 或 \ 分隔,unix 也允许 . 在文件名中,所以 t.est.txt 也应该匹配。

我的代码:

var regex = new RegExp('[\\/]?([/\w+.]+/\w+)/\s*$');
var value = this.attachment.fileInput.dom.value;
console.log(value.match(regex));
console.log(regex.exec(value));

这个正则表达式在rubular中工作正常。但由于某种原因,即 chrome 和 firefox 不匹配任何字符串并返回 null。

4

3 回答 3

8

您可以抓住最后一个\or之后的任何内容/,例如:

var file = str.match(/[^\\/]+$/)[0];

(记住文件并不总是需要扩展名)

虽然如果你真的想强制扩展匹配:

var file = str.match(/[^\\/]+\.[^\\/]+$/)[0];
于 2013-10-10T09:55:22.523 回答
5

尝试以下语法:

var filename = (value.match(/[^\\/]+\.[^\\/]+$/) || []).pop();

它应该适用于以下示例:

"path/to/file.ext"     --> "file.ext"
"path\\to\\file.ext"   --> "file.ext"
"path/to/file.ext.txt" --> "file.ext.txt"
"path/to/file"         --> ""
于 2013-10-10T09:49:42.087 回答
3

此片段的积分转到RegeBuddy的库:

if (/[^\\\/:*?"<>|\r\n]+$/im.test(js)) {
    // Successful match
} else {
    // Match attempt failed
}
于 2013-10-10T09:56:54.983 回答