[英]Escape special characters in a String
我有一个字符串: c:\\build\\target
。
它来自外部来源,直接传递。 我无法在javascript中使用它之前对其进行修改。
但是\\b
和\\t
是特殊字符,但我只是想c:uild arget
外观打印(或使用)它,而不是按解释为c:uild arget
。
这怎么可能?
您可以尝试:
string = "c:\build\target";
string = string.replace(/[\n]/g,'\\n');
string = string.replace(/[\r]/g,'\\r');
string = string.replace(/[\t]/g,'\\t');
string = string.replace(/[\b]/g,'\\b');
string = string.replace(/[\f]/g,'\\f');
console.log(string);
但是可能还有其他问题,因为您必须抓住所有其他特殊字符
使用单个正则表达式替换(而不是多个)更快,并且避免了与替换顺序有关的错误。
console.info('c:\build\target'); // cuild arget
console.info(escape('c:\build\target')); // c:\build\target
function escape(str) {
return str.replace(/[\b\f\n\r\t\v\0\'\"\\]/g, match => {
return {
'\b': '\\b',
'\f': '\\f',
'\n': '\\n',
'\r': '\\r',
'\t': '\\t',
'\v': '\\v',
'\0': '\\0',
'\'': '\\\'',
'\"': '\\\"',
'\\': '\\\\'
}[match]
})
}
最简单的方法是转义每个反斜杠(因此将其解释为文字反斜杠)。
如果您不能在远程系统本身上执行此操作,则需要执行此操作,因为正在使用Javascript解析数据。 显然,一旦有了 Javascript字符串,反斜杠就已经丢失了。
因此,从“远程字符串”(包含\\
字符和b
)到“ Javascript字符串”(包含\\b
不可打印字符)的那一刻,您需要注意反斜杠。 并确保它们以文字反斜杠(即转义)而不是转义前缀的形式传递。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.