将字符串中所有出现的斜杠替换为双斜杠时遇到问题。现在,这个问题使我无法打开文件,因此我需要“转义”路径中的所有斜杠。
路径看起来像这样:
C:\Folder\tmp\c235adf5b8c79ee61910a0c04abf9bc1
我想将所有斜杠替换为双斜杠,以便最终看起来像这样:
C:\\Folder\\tmp\\c235adf5b8c79ee61910a0c04abf9bc1
我已经尝试使用此解决方案,但对我而言不起作用:
str.replace(/\\/g, "\\\\");
上述解决方案的输出将产生以下字符串:
C:Folder mpc235adf5b8c79ee61910a0c04abf9bc1
编辑,这是我要解决问题的实际代码:
exports.register = function (req, res) {
let user = new db.User();
req.files.forEach(function(file) {
const uploadDir = 'upload/' + user._id + '/' + file.name;
const filePath = path.resolve('./' + file.path);
console.log(filePath);
ftp.put(filePath, uploadDir, function(err) {
if(err) return console.log(err);
console.log('Uploaded file: ' + file.name);
});
});
};
我省略了无关的部分
答案 0 :(得分:1)
\
字符是JavaScript字符串文字中的转义字符。字符串中不存在。
您不能使用正则表达式来解决问题,因为它是您需要更改的源代码,而不是字符串本身中的数据。
当您获得字符串时,\
个字符将被解析,并且\t
将变成一个制表符。此时,操作数据以获取实际目录路径为时为时已晚。
答案 1 :(得分:1)
如果您的输入在JavaScript中进行了硬编码,则除非您转义了转义字符(\\
),否则转义该字符串中的字符。尝试使用该字符串的控制台输出
console.log('C:\Folder\tmp\c235adf5b8c79ee61910a0c04abf9bc1');
// outputs "C:Folder mpc235adf5b8c79ee61910a0c04abf9bc1"
因此,斜杠的替换不会替换任何内容,因为其中实际上没有任何斜杠。
'C:\\Folder\\tmp\\c235adf5b8c79ee61910a0c04abf9bc1'.replace(/\\/g, '\\\\')
运行上面类似的内容会完全输出您想要的内容。
为了详细说明,C:Folder
和mpc235adf5b8c79ee61910a0c04abf9bc1
之间存在间隙,因为\t
是制表符,而空格是制表符。 c
仍然在mp
之后,因为\c
不是什么,它不是转义序列。
如果您从其他来源(不是在JS中进行硬编码)获得了此文本,则无需担心,您的str.replace(/\\/g, "\\\\");
会按预期工作。
var Path = 'C:\\Folder\\tmp\\c235adf5b8c79ee61910a0c04abf9bc1';
console.log(Path);
console.log(Path.replace(/\\/g, '\\\\'))
console.log(Path.replace(/\\/g, '/'))
//VM2431:2 C:\Folder\tmp\c235adf5b8c79ee61910a0c04abf9bc1
//VM2431:3 C:\\Folder\\tmp\\c235adf5b8c79ee61910a0c04abf9bc1
//VM2431:4 C:/Folder/tmp/c235adf5b8c79ee61910a0c04abf9bc1
答案 2 :(得分:0)
String.raw`C:\Folder\tmp\c235adf5b8c79ee61910a0c04abf9bc1`
输出:
"C:\\Folder\\tmp\\c235adf5b8c79ee61910a0c04abf9bc1"