簡體   English   中英

轉義字符串中的特殊字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM