2

我有一个字符串: c:\build\target

这来自外部源,按原样直接传递。在 javascript 中使用它之前,我无法修改它。

但是\b\t是特殊字符,但我只是想按它的样子打印(或使用它),而不是按照它的解释c:uild arget

这怎么可能?

4

3 回答 3

3

使用单个正则表达式替换(而不是多个)更快并且避免与替换顺序相关的错误。

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]
  })
}
于 2017-10-04T23:25:56.903 回答
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);​

但可能还有其他一些问题,因为您必须捕获所有其他特殊字符

于 2012-10-26T15:06:21.153 回答
0

最简单的方法是转义每个反斜杠(因此它被解释为文字反斜杠)。

如果您不能在远程系统本身上执行此操作,则您需要执行此操作,因为数据是在 Javascript 中解析的。显然,一旦你已经有了一个 Javascript 字符串,反斜杠就已经丢失了。

因此,当您从“远程字符串”(包括一个\后跟一个字符b)到“Javascript 字符串”(包括一个\b不可打印的字符)时,您需要注意反斜杠。并确保它们作为文字反斜杠(即转义)而不是作为转义前缀传递。

于 2012-10-26T14:58:22.503 回答