将单反斜杠"\ "替换为双反斜杠"\\ "。

24

我有一个包含文件路径的字符串。我想将所有单反斜杠 ("\") 替换为双反斜杠 ("\\")。

   var replaceableString = "c:\asd\flkj\klsd\ffjkl";
   var part = /@"\\"/g;
   var filePath = replaceableString .replace(part, /@"\\"/);
   console.log(filePath);

控制台向我展示了它。

   c:asdlkjklsdfjkl

我发现了类似这样的内容,不幸的是它没有起作用。 将\替换为\\


3
那里的 "@" 在做什么? - Jon
6
您的字符串不包含 \。 - Prasath K
为什么你需要这样做? - Ja͢ck
3
不是的。您缺乏对JavaScript中字符串工作原理的基本理解。 - Tomalak
@user2075057 不是这样的... '' 是转义字符,'\' 才是反斜杠,我的意思是你的 ''。请查看我的答案和 js fiddle 链接。 - Prasath K
显示剩余7条评论
10个回答

14

试试:

   var parts = replaceableString.split('\\');
   var output = parts.join('\\\\');

就我个人而言,在处理非字母数字字符时,由于可读性和避免奇怪的错误,我倾向于避免使用正则表达式,因为我对正则表达式不是很熟悉。


12
var replaceableString = "c:\asd\flkj\klsd\ffjkl";
alert(replaceableString);

这将提示您 c:asdlkjklsdfjkl,因为'\'是转义字符,不会被考虑在内。

如果要在字符串中使用反斜杠,您可以按照以下方式操作...

var replaceableString = "c:\\asd\\flkj\\klsd\\ffjkl";
alert(replaceableString);

这将会警告您:c:\asd\flkj\klsd\ffjkl

JS Fiddle

在这里了解转义序列

如果您希望字符串默认带有 '\',则应该对其进行转义.. 使用 escape() 函数。

var replaceableString = escape("c:\asd\flkj\klsd\ffjkl");
alert(replaceableString);

JS Fiddle


10

你的代码有几个问题。

  1. 要在字符串变量中获得 \,你需要转义它。

    当你创建像这样的字符串:replaceableString = "c:\asd\flkj\klsd\ffjkl"; 在其前面带有 \ 的字符被视为转义序列。因此,在字符串创建过程中,它试图解释转义序列 \a,由于这是无效的,它会将 a 存储到字符串中。例如,\n 将被解释为换行符。

  2. 我假设你的 @ 来自 .net 示例。Javascript 不认识“原始”字符串。

  3. 从你的正则表达式中删除引号。

这将实现你想要的功能:

var string = "c:\\asd\\flkj\\klsd\\ffjkl";
var regex = /\\/g;
var FilePath = string.replace(regex, "\\\\");

6

以下是答案:

要将单个反斜杠替换为单个正斜杠

var stringReplaced = String.raw`c:\asd\flkj\klsd\ffjkl`.split('\\').join('/')
console.log(stringReplaced);

双反斜杠替换为单正斜杠

var stringReplaced = String.raw`c:\\asd\\flkj\\klsd\\ffjkl`.split('\\\\').join('/')
console.log(stringReplaced);

1
这不是答案,因为问题本身并不是如何一开始就用正斜杠替换。 - Forage

4

\ 是转义字符。因此,replaceableString 中不含有任何反斜杠。

要解决这个问题,您应该像这样声明字符串:

var replaceableString = "c:\\asd\\flkj\\klsd\\ffjkl";

用户在输入框中输入路径本身的事实。实时处理管理行,并替换所有“\”按键? - PilgrimViis
@user2075057 请明确用户输入路径时使用的是 '',所以您希望它保留在字符串中...??我的意思是不需要转义...?? - Prasath K
@Prasath K 我想使用我的Java代码从文件中显示某些内容。 - PilgrimViis
@Prasath K 我还想将输入字段中的信息保存在同一文件中。这对我的服务很重要。我已经决定了这个任务,但如果我必须输入双斜杠,那就不太美观了。 - PilgrimViis
感谢大家,我找到了解决方案! 我只需在Java函数中替换反斜杠即可。在JavaScript中将出现像这样的字符串:“c:\ asd \ flkj \ klsd \ ffjkl”。我认为这应该有效。 - PilgrimViis
显示剩余2条评论

4

首先将字符串进行编码

然后将所有出现的 %5C 替换为 %5C%5C

最后解码字符串

var result = encodeURI(input);
result=decodeURI(result.replace(/%5C/g,"%5C%5C"));

0

在字符串匹配的情况下,最好使用encodeURIComponent、decodeURIComponent。

match(encodeURIComponent(inputString));

function match(input)
{

for(i=0; i<arr.length; i++)
{
if(arr[i] == decodeURIComponent(input))
return true;
else return false;
}
}

0

如果您无法控制要在其中查找反斜杠的字符串的内容,并且它包含单个\值(例如变量myPath包含C:\Some\Folder\file.jpg),那么您实际上可以在JavaScript中引用单个反斜杠,如String.fromCharCode(92)

因此,要获取上面我的文件路径示例中的文件名。

var justTheName = myPath.split(String.fromCharCode(92)).pop();

-1

如果字符串中只有一个反斜杠,JavaScript的replace方法无法替换该反斜杠。

相反,您需要使用split方法将字符串拆分为数组,然后连接不带反斜杠(或任何您想要替换的字符)的字符串。

解决方案(用下划线替换反斜杠):

var splitText = stringWithBackslash.split('\\');
var updatedText = splitText[0] + '_' + splitText[1];

-1

在将值赋给变量之前,您需要通过String.raw传递字符串的值。

var replaceableString = String.raw`c:\asd\flkj\klsd\ffjkl`.replace(/\\/g,"\\\\");
console.log(replaceableString)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接