[英]How to escape and unescape quotes in JavaScript?
這是一段很短的代碼:
var utility = {
escapeQuotes: function(string) {
return string.replace(new RegExp('"', 'g'),'\\"');
},
unescapeQuotes: function(string) {
return string.replace(new RegExp('\\"', 'g'),'"');
}
};
var a = 'hi "';
var b = utility.escapeQuotes(a);
var c = utility.unescapeQuotes(b);
console.log(b + ' | ' + c);
我希望這段代碼能夠正常運行,但結果卻收到了:
hi \" | hi \"
如果我將unescapeQuotes方法中新的RegExp構造函數的第一個參數更改為4個反斜杠,則一切都會按預期運行。
string.replace(new RegExp('\\\\"', 'g'),'"');
結果:
hi \" | hi "
為什么需要四個反斜杠作為新RegExp構造函數的第一個參數? 為什么它只與其中2個一起使用?
問題是你正在使用RegExp
構造函數,它接受一個字符串,而不是使用正則表達式文字。 所以在你的unescape的這一行:
return string.replace(new RegExp('\\"', 'g'),'"');
... \\\\
作為處理字符串的部分由JavaScript解析器解釋,導致將單個反斜杠傳遞給正則表達式解析器。 所以正則表達式解析器看到的表達式是\\"
。”反斜杠也是正則表達式中的轉義字符,但是\\"
並不意味着什么特別的東西,最終只是"
。要在正則表達式中有一個實際的反斜杠,你有有兩個;要在字符串文字中這樣做,你必須有四個 (因此它們在兩個解釋層中都存在)。
除非你有充分的理由使用RegExp
構造函數(例如,你必須使用一些不同的輸入),所以總是使用文字形式:
var utility = {
escapeQuotes: function(string) {
return string.replace(/"/g, '\\"');
},
unescapeQuotes: function(string) {
return string.replace(/\\"/g, '"');
}
};
它不那么令人困惑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.