是否有一种方法,我可以得到的最后一个值(基于'\'符号)从一个完整的路径?
例子:
C:\Documents and Settings\img\recycled log.jpg
在这种情况下,我只想从JavaScript的完整路径中回收log.jpg。
是否有一种方法,我可以得到的最后一个值(基于'\'符号)从一个完整的路径?
例子:
C:\Documents and Settings\img\recycled log.jpg
在这种情况下,我只想从JavaScript的完整路径中回收log.jpg。
当前回答
在Node.js中,你可以使用路径。basename方法
const path = require('path');
const file = '/home/user/dir/file.txt';
const filename = path.basename(file);
//=> 'file.txt'
其他回答
不需要专门处理反斜杠;大多数答案不处理搜索参数。
现代的方法是简单地使用URL API并获取pathname属性。API将反斜杠规范化为斜杠。注意,位置(在浏览器环境中)也可以工作,但仅适用于当前URL,而不是任意URL。
为了将结果%20解析为空格,只需将其传递给decodeURIComponent。
const getFileName = (fileName) => new URL(fileName).pathname.split("/").pop(); // URLs need to have the scheme portion, e.g. `file://` or `https://`. console.log(getFileName("file://C:\\Documents and Settings\\img\\recycled log.jpg")); // "recycled%20log.jpg" console.log(decodeURIComponent(getFileName("file://C:\\Documents and Settings\\img\\recycled log.jpg"))); // "recycled log.jpg" console.log(getFileName("https://example.com:443/path/to/file.png?size=480")); // "file.png" .as-console-wrapper { max-height: 100% !important; top: 0; }
如果你总是想要路径的最后一个非空部分(例如,来自https://example.com/file.png/的file.png),在.pop()之前添加一个.filter(布尔值)。
如果您只有一个相对URL,但仍然只想获得文件名,则使用URL构造函数的第二个参数来传递基源。“https://example.com”足够:新的URL(文件名,“https://example.com”)。也可以在你的文件名前加上“https://”——URL构造函数接受https://path/to/file.ext作为有效的URL。
这个解决方案对'fileName'和'path'都更简单和通用。
parsePath = (path) => {
// regex to split path (untile last / or \ to two groups '(.*[\\\/])' for path and '(.*)' (untile the end after the \ or / )for file name
const regexPath = /^(?<path>(.*[\\\/])?)(?<filename>.*)$/;
const match = regexPath.exec(path);
if (path && match) {
return {
path: match.groups.path,
filename: match.groups.filename
}
}
throw Error("Error parsing path");
}
// example
const str = 'C:\\Documents and Settings\\img\\recycled log.jpg';
parsePath(str);
不是比nickf的回答更简洁,但是这个直接“提取”了答案,而不是用空字符串替换不需要的部分:
var filename = /([^\\]+)$/.exec(fullPath)[1];
下面这行JavaScript代码将提供文件名。
var z = location.pathname.substring(location.pathname.lastIndexOf('/')+1);
alert(z);
成功为你的问题编写脚本,完整测试
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<p title="text" id="FileNameShow" ></p>
<input type="file"
id="myfile"
onchange="javascript:showSrc();"
size="30">
<script type="text/javascript">
function replaceAll(txt, replace, with_this) {
return txt.replace(new RegExp(replace, 'g'), with_this);
}
function showSrc() {
document.getElementById("myframe").href = document.getElementById("myfile").value;
var theexa = document.getElementById("myframe").href.replace("file:///", "");
var path = document.getElementById("myframe").href.replace("file:///", "");
var correctPath = replaceAll(path, "%20", " ");
alert(correctPath);
var filename = correctPath.replace(/^.*[\\\/]/, '')
$("#FileNameShow").text(filename)
}