用\\替换所有\-Javascript

时间:2018-08-23 18:12:35

标签: javascript

将字符串中所有出现的斜杠替换为双斜杠时遇到问题。现在,这个问题使我无法打开文件,因此我需要“转义”路径中的所有斜杠。

路径看起来像这样:

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);
        });
    });
};

我省略了无关的部分

3 个答案:

答案 0 :(得分:1)

\字符是JavaScript字符串文字中的转义字符。字符串中不存在。

您不能使用正则表达式来解决问题,因为它是您需要更改的源代码,而不是字符串本身中的数据。

当您获得字符串时,\个字符将被解析,并且\t将变成一个制表符。此时,操作数据以获取实际目录路径为时为时已晚

答案 1 :(得分:1)

如果您的输入在JavaScript中进行了硬编码,则除非您转义了转义字符(\\),否则转义该字符串中的字符。尝试使用该字符串的控制台输出

console.log('C:\Folder\tmp\c235adf5b8c79ee61910a0c04abf9bc1');
// outputs "C:Folder    mpc235adf5b8c79ee61910a0c04abf9bc1"

因此,斜杠的替换不会替换任何内容,因为其中实际上没有任何斜杠。

'C:\\Folder\\tmp\\c235adf5b8c79ee61910a0c04abf9bc1'.replace(/\\/g, '\\\\')

运行上面类似的内容会完全输出您想要的内容。

为了详细说明,C:Foldermpc235adf5b8c79ee61910a0c04abf9bc1之间存在间隙,因为\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.

String.raw`C:\Folder\tmp\c235adf5b8c79ee61910a0c04abf9bc1`

输出:

"C:\\Folder\\tmp\\c235adf5b8c79ee61910a0c04abf9bc1"