我有一个字符串:
c:\build\target
。
这来自外部源,直接传递。在javascript中使用它之前我无法修改它。
但是\b
和\t
是特殊字符,但我只想打印它(或使用它),因为它看起来像,而不是它被解释为c:uild arget
。
怎么可能?
答案 0 :(得分:2)
你可以尝试:
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);
但是可能还有一些其他问题,因为你必须抓住所有其他特殊字符
答案 1 :(得分:2)
使用单个正则表达式替换(而不是很多)更快,并避免与替换顺序相关的错误。
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]
})
}
答案 2 :(得分:0)
最简单的方法是转义每个反斜杠(因此它被解释为文字反斜杠)。
如果您无法在远程系统上执行此操作,则需要执行此操作,因为数据是在Javascript中解析的。显然,一旦你拥有一个Javascript字符串,反斜杠就已经丢失了。
所以你从“远程字符串”(包括\
字符后跟b
)到“Javascript字符串”(包括\b
不可打印字符),你需要留意反斜杠。并确保它们作为字面反斜杠(即转义)传递,而不是作为转义前缀。