簡體   English   中英

如何在JavaScript中轉義和取消引用?

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

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