Javascript 和反斜杠替换

Posted

技术标签:

【中文标题】Javascript 和反斜杠替换【英文标题】:Javascript and backslashes replace 【发布时间】:2011-01-29 13:48:04 【问题描述】:

这是我的字符串:

var str = "This is my \string";

这是我的代码:

var replaced = str.replace("/\\/", "\\\\");

我的输出不能是:

"This is my \\string"

我已经尝试了所有我能想到的正则表达式和替换值的组合。

感谢任何帮助!

【问题讨论】:

【参考方案1】:

多年来对此感到困惑,所有答案都坚持认为源字符串需要已经在其中转义了反斜杠......但情况并非总是如此。

这样做..

var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92));

【讨论】:

我不明白为什么,但这对我不起作用。这是一个jsfiddle,请帮忙。 jsfiddle.net/a2nsL4bv @TimarIvoBatis ,我刚刚看到你的这个评论,你需要转义反斜杠。 ***.com/questions/8351547/… 不知道为什么这有 49 票。 String.fromCharCode 调用是不必要的。问题中的问题是字符串 literal "This is my \string" 包含 zero 反斜杠。您不能替换开头字符串中没有的内容。字符串变量str可能包含反斜杠,然后可以像str.replace(/\\/g, "\\\\")str.replaceAll("\\", "\\\\")一样简单地替换它们。但是如果你没有正确地开始你的文字(如问题中所写),这个答案将无济于事。【参考方案2】:

字符串不包含反斜杠,它包含\s 转义序列。

var str = "This is my \\string";

如果你想要一个正则表达式,你应该有一个正则表达式,而不是一个字符串。

var replaced = str.replace(/\\/, "\\\\");

【讨论】:

var 替换 = str.replace(/\\/g, "\\\\");不是 /g 全局标志是必需的,但如果你想替换反斜杠的每个实例,这就是你的做法。 在 sqllite 中可以很好地保存 JSON.stringfy() 以删除反斜杠。谢谢【参考方案3】:

问题是您的第一行中的 \ 甚至无法识别。它认为反斜杠将标记转义序列,但 \s 不是转义字符,因此被忽略。您的 var str 被解释为“这是我的字符串”。试试str.indexOf("\\") - 你会发现它是-1,因为根本没有反斜杠。如果您控制 str 的内容,请按照 David 所说的操作 - 添加另一个 \ 以转义第一个。

【讨论】:

问题是我不控制值。它实际上是我正在处理的 Windows 路径( \wp-content\photos\image123.jpg )。该字符串以“\wp-content\photos\image123.jpg”的形式提供给我,但我无法对它做任何事情,因为反斜杠消失了。我知道它们被解析为转义字符,但我不知道如何修复它。 要么你得到损坏的 JS(在这种情况下你无法修复它),要么你得到一个其他语言的字符串并将其输出到 JS 而没有先转义特殊字符,在这种情况下你必须在那里修复它。 同意 - 转义序列可以进入字符串的唯一方法是字符串是用 javascript 构造的。如果它来自表单字段、ajax 响应、查询字符串等,则不需要转义。当你说“字符串是给我的......”时 - 它实际上是如何提供给你的? @Tesserex 我尝试了 str.indexOf("\\"),我得到了一个 json-string,它嵌套了一个带有反斜杠的 json-string。真的很烂……【参考方案4】:

如果您有多个实例或反斜杠:

str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92))

【讨论】:

【参考方案5】:

var a = String.raw`This is my \string`.replace(/\\/g,"\\\\");
console.log(a);

结果:

This is my \\string

【讨论】:

【参考方案6】:

使用这个

str.replace(/(\s)/g,function($0)return $0==' '?' ':'\\s')

str.replace(/ /g,'something').replace(/\s/g,'\\s').replace(/something/g,' ');

'something' 可能是字符串中不存在的字符组合

var str=' \s';  
  str.replace(/\s/g,'\\s'); 
// return '\\s\\s'   
  str.replace(/ /g,'SpAcE').replace(/\s/g,'\\s').replace(/SpAcE/g,' ');
// return ' \\s' 

【讨论】:

【参考方案7】:

如果用例是替换函数的 toString 中的某些值,并将字符串转换回有效的函数。

var exFnStr1 = exFn.toString();

var exFnStr = "";
var quoteStarted = false;
for(i = 0; i < exFnStr1.length; i++) 
    var iChar = exFnStr1.charAt(i);
    var oChar = exFnStr1.charAt(i);
    var currentCharCode = exFnStr1.charCodeAt(i);
    if(quoteStarted) 
        if(currentCharCode === 9) oChar = "tabChar";
        if(currentCharCode === 10) oChar = "newlineChar";
    
    //console.log(iChar+"->"+currentCharCode+"->"+oChar)
    exFnStr += oChar;

    if(currentCharCode === 34) 
        if(quoteStarted) quoteStarted = false;
        else quoteStarted = true;
    

console.log(exFnStr);

//TODO - replace values in the string

exFn = new Function('return ' + exFnStr)();

【讨论】:

【参考方案8】:

我还没有尝试过,但是以下应该工作

var replaced = str.replace((new RegExp("\s"),"\\s");

本质上你不想替换“\”,你想替换“\s”转义序列所代表的字符。

不幸的是,您需要对字母表中的每个字母、每个数字、符号等执行此操作,以涵盖所有基础

【讨论】:

"\s""s",所以这也会得到任何其他 s 字符。除非序列是控制字符,否则您最终会在字符串中的每个字符前加上 ``。

以上是关于Javascript 和反斜杠替换的主要内容,如果未能解决你的问题,请参考以下文章

oracle regexp_replace 保留数字和反斜杠

斜杠/,反斜杠,斜杠/,点斜杠./,点点斜杠../

对表单input输入框加特殊符号(正斜杠和反斜杠)校验

使用换行符和反斜杠渲染ASCII艺术字符串

shell脚本如何把反斜杠替换成斜杠反斜杠,比如2014\/5\/10变成2014/5/10,急用谢谢!

文件路径中正斜杠 (/) 和反斜杠 (\) 之间的区别